@odoo/o-spreadsheet 16.2.14 → 16.2.17
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 +155 -95
- package/dist/o-spreadsheet.d.ts +13 -5
- package/dist/o-spreadsheet.esm.js +155 -95
- package/dist/o-spreadsheet.iife.js +155 -95
- package/dist/o-spreadsheet.iife.min.js +227 -226
- package/package.json +2 -2
|
@@ -988,13 +988,17 @@
|
|
|
988
988
|
return position === "after" ? base + 1 : base;
|
|
989
989
|
}
|
|
990
990
|
/**
|
|
991
|
-
*
|
|
991
|
+
* Compares two objects.
|
|
992
992
|
*/
|
|
993
993
|
function deepEquals(o1, o2) {
|
|
994
994
|
if (o1 === o2)
|
|
995
995
|
return true;
|
|
996
996
|
if ((o1 && !o2) || (o2 && !o1))
|
|
997
997
|
return false;
|
|
998
|
+
if (typeof o1 !== typeof o2)
|
|
999
|
+
return false;
|
|
1000
|
+
if (typeof o1 !== "object")
|
|
1001
|
+
return o1 === o2;
|
|
998
1002
|
// Objects can have different keys if the values are undefined
|
|
999
1003
|
const keys = new Set();
|
|
1000
1004
|
Object.keys(o1).forEach((key) => keys.add(key));
|
|
@@ -4680,6 +4684,7 @@
|
|
|
4680
4684
|
padding: 10px;
|
|
4681
4685
|
width: ${ERROR_TOOLTIP_WIDTH}px;
|
|
4682
4686
|
box-sizing: border-box !important;
|
|
4687
|
+
overflow-wrap: break-word;
|
|
4683
4688
|
}
|
|
4684
4689
|
`;
|
|
4685
4690
|
class ErrorToolTip extends owl.Component {
|
|
@@ -4861,6 +4866,9 @@
|
|
|
4861
4866
|
});
|
|
4862
4867
|
this.state.values = this.getFilterValues(this.props.filterPosition);
|
|
4863
4868
|
}
|
|
4869
|
+
get isReadonly() {
|
|
4870
|
+
return this.env.model.getters.isReadonly();
|
|
4871
|
+
}
|
|
4864
4872
|
getFilterValues(position) {
|
|
4865
4873
|
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
4866
4874
|
const filter = this.env.model.getters.getFilter({ sheetId, ...position });
|
|
@@ -7242,6 +7250,7 @@
|
|
|
7242
7250
|
this.labelsAsText = definition.labelsAsText;
|
|
7243
7251
|
this.stacked = definition.stacked;
|
|
7244
7252
|
this.aggregated = definition.aggregated;
|
|
7253
|
+
this.cumulative = definition.cumulative;
|
|
7245
7254
|
}
|
|
7246
7255
|
static validateChartDefinition(validator, definition) {
|
|
7247
7256
|
return validator.checkValidations(definition, checkDataset, checkLabelRange);
|
|
@@ -7262,6 +7271,7 @@
|
|
|
7262
7271
|
labelRange: context.auxiliaryRange || undefined,
|
|
7263
7272
|
stacked: false,
|
|
7264
7273
|
aggregated: false,
|
|
7274
|
+
cumulative: false,
|
|
7265
7275
|
};
|
|
7266
7276
|
}
|
|
7267
7277
|
getDefinition() {
|
|
@@ -7282,6 +7292,7 @@
|
|
|
7282
7292
|
labelsAsText: this.labelsAsText,
|
|
7283
7293
|
stacked: this.stacked,
|
|
7284
7294
|
aggregated: this.aggregated,
|
|
7295
|
+
cumulative: this.cumulative,
|
|
7285
7296
|
};
|
|
7286
7297
|
}
|
|
7287
7298
|
getContextCreation() {
|
|
@@ -7485,6 +7496,16 @@
|
|
|
7485
7496
|
if (chart.stacked) {
|
|
7486
7497
|
backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
|
|
7487
7498
|
}
|
|
7499
|
+
if (chart.cumulative) {
|
|
7500
|
+
let accumulator = 0;
|
|
7501
|
+
data = data.map((value) => {
|
|
7502
|
+
if (!isNaN(value)) {
|
|
7503
|
+
accumulator += parseFloat(value);
|
|
7504
|
+
return accumulator;
|
|
7505
|
+
}
|
|
7506
|
+
return value;
|
|
7507
|
+
});
|
|
7508
|
+
}
|
|
7488
7509
|
const backgroundColor = rgbaToHex(backgroundRGBA);
|
|
7489
7510
|
const dataset = {
|
|
7490
7511
|
label,
|
|
@@ -8267,6 +8288,7 @@
|
|
|
8267
8288
|
labelsAsText: false,
|
|
8268
8289
|
stacked: false,
|
|
8269
8290
|
aggregated: false,
|
|
8291
|
+
cumulative: false,
|
|
8270
8292
|
labelRange: labelRangeXc,
|
|
8271
8293
|
type: "line",
|
|
8272
8294
|
dataSetsHaveTitle,
|
|
@@ -8629,6 +8651,13 @@
|
|
|
8629
8651
|
elements: rows,
|
|
8630
8652
|
});
|
|
8631
8653
|
};
|
|
8654
|
+
const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
|
|
8655
|
+
const sheetId = env.model.getters.getActiveSheetId();
|
|
8656
|
+
const selectedElements = env.model.getters.getElementsFromSelection(dimension);
|
|
8657
|
+
const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
|
|
8658
|
+
const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
|
|
8659
|
+
return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
|
|
8660
|
+
};
|
|
8632
8661
|
const REMOVE_COLUMNS_NAME = (env) => {
|
|
8633
8662
|
if (env.model.getters.getSelectedZones().length > 1) {
|
|
8634
8663
|
return _lt("Delete columns");
|
|
@@ -9219,11 +9248,7 @@
|
|
|
9219
9248
|
name: REMOVE_COLUMNS_NAME,
|
|
9220
9249
|
sequence: 90,
|
|
9221
9250
|
action: REMOVE_COLUMNS_ACTION,
|
|
9222
|
-
isVisible: (env) =>
|
|
9223
|
-
const sheetId = env.model.getters.getActiveSheetId();
|
|
9224
|
-
const selectedCols = env.model.getters.getElementsFromSelection("COL");
|
|
9225
|
-
return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
|
|
9226
|
-
},
|
|
9251
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
|
|
9227
9252
|
})
|
|
9228
9253
|
.add("clear_column", {
|
|
9229
9254
|
name: DELETE_CONTENT_COLUMNS_NAME,
|
|
@@ -9237,7 +9262,7 @@
|
|
|
9237
9262
|
isVisible: (env) => {
|
|
9238
9263
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
9239
9264
|
const selectedCols = env.model.getters.getElementsFromSelection("COL");
|
|
9240
|
-
return env.model.getters.
|
|
9265
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
|
|
9241
9266
|
},
|
|
9242
9267
|
separator: true,
|
|
9243
9268
|
})
|
|
@@ -9311,11 +9336,7 @@
|
|
|
9311
9336
|
name: REMOVE_ROWS_NAME,
|
|
9312
9337
|
sequence: 70,
|
|
9313
9338
|
action: REMOVE_ROWS_ACTION,
|
|
9314
|
-
isVisible: (env) =>
|
|
9315
|
-
const sheetId = env.model.getters.getActiveSheetId();
|
|
9316
|
-
const selectedRows = env.model.getters.getElementsFromSelection("ROW");
|
|
9317
|
-
return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
|
|
9318
|
-
},
|
|
9339
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
|
|
9319
9340
|
})
|
|
9320
9341
|
.add("clear_row", {
|
|
9321
9342
|
name: DELETE_CONTENT_ROWS_NAME,
|
|
@@ -9329,7 +9350,7 @@
|
|
|
9329
9350
|
isVisible: (env) => {
|
|
9330
9351
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
9331
9352
|
const selectedRows = env.model.getters.getElementsFromSelection("ROW");
|
|
9332
|
-
return env.model.getters.
|
|
9353
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
|
|
9333
9354
|
},
|
|
9334
9355
|
separator: true,
|
|
9335
9356
|
})
|
|
@@ -16175,11 +16196,13 @@
|
|
|
16175
16196
|
name: REMOVE_ROWS_NAME,
|
|
16176
16197
|
sequence: 80,
|
|
16177
16198
|
action: REMOVE_ROWS_ACTION,
|
|
16199
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
|
|
16178
16200
|
})
|
|
16179
16201
|
.addChild("edit_delete_column", ["edit"], {
|
|
16180
16202
|
name: REMOVE_COLUMNS_NAME,
|
|
16181
16203
|
sequence: 90,
|
|
16182
16204
|
action: REMOVE_COLUMNS_ACTION,
|
|
16205
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
|
|
16183
16206
|
})
|
|
16184
16207
|
.addChild("edit_delete_cell_shift_up", ["edit"], {
|
|
16185
16208
|
name: _lt("Delete cell and shift up"),
|
|
@@ -17492,6 +17515,11 @@
|
|
|
17492
17515
|
aggregated: ev.target.checked,
|
|
17493
17516
|
});
|
|
17494
17517
|
}
|
|
17518
|
+
onUpdateCumulative(ev) {
|
|
17519
|
+
this.props.updateChart(this.props.figureId, {
|
|
17520
|
+
cumulative: ev.target.checked,
|
|
17521
|
+
});
|
|
17522
|
+
}
|
|
17495
17523
|
}
|
|
17496
17524
|
LineConfigPanel.template = "o-spreadsheet-LineConfigPanel";
|
|
17497
17525
|
|
|
@@ -18681,9 +18709,9 @@
|
|
|
18681
18709
|
}
|
|
18682
18710
|
setup() {
|
|
18683
18711
|
this.showFormulaState = this.env.model.getters.shouldShowFormulas();
|
|
18684
|
-
this.debouncedUpdateSearch = debounce(this.updateSearch.bind(this), 200);
|
|
18685
18712
|
owl.onMounted(() => this.focusInput());
|
|
18686
18713
|
owl.onWillUnmount(() => {
|
|
18714
|
+
clearTimeout(this.debounceTimeoutId);
|
|
18687
18715
|
this.env.model.dispatch("CLEAR_SEARCH");
|
|
18688
18716
|
this.env.model.dispatch("SET_FORMULA_VISIBILITY", { show: this.showFormulaState });
|
|
18689
18717
|
});
|
|
@@ -18728,6 +18756,13 @@
|
|
|
18728
18756
|
searchOptions: this.state.searchOptions,
|
|
18729
18757
|
});
|
|
18730
18758
|
}
|
|
18759
|
+
debouncedUpdateSearch() {
|
|
18760
|
+
clearTimeout(this.debounceTimeoutId);
|
|
18761
|
+
this.debounceTimeoutId = setTimeout(() => {
|
|
18762
|
+
this.updateSearch();
|
|
18763
|
+
this.debounceTimeoutId = undefined;
|
|
18764
|
+
}, 200);
|
|
18765
|
+
}
|
|
18731
18766
|
replace() {
|
|
18732
18767
|
this.env.model.dispatch("REPLACE_SEARCH", {
|
|
18733
18768
|
replaceWith: this.state.replaceWith,
|
|
@@ -20851,9 +20886,11 @@
|
|
|
20851
20886
|
}
|
|
20852
20887
|
}
|
|
20853
20888
|
function updateMousePosition(e) {
|
|
20854
|
-
|
|
20855
|
-
|
|
20856
|
-
|
|
20889
|
+
if (gridRef.el === e.target) {
|
|
20890
|
+
x = e.offsetX;
|
|
20891
|
+
y = e.offsetY;
|
|
20892
|
+
lastMoved = Date.now();
|
|
20893
|
+
}
|
|
20857
20894
|
}
|
|
20858
20895
|
function recompute() {
|
|
20859
20896
|
const { col, row } = getPosition();
|
|
@@ -24966,6 +25003,7 @@
|
|
|
24966
25003
|
legendPosition: chartData.legendPosition,
|
|
24967
25004
|
stacked: chartData.stacked || false,
|
|
24968
25005
|
aggregated: false,
|
|
25006
|
+
cumulative: chartData.cumulative || false,
|
|
24969
25007
|
labelsAsText: false,
|
|
24970
25008
|
};
|
|
24971
25009
|
}
|
|
@@ -29404,7 +29442,11 @@
|
|
|
29404
29442
|
let sizes = [...this.sizes[cmd.sheetId][cmd.dimension]];
|
|
29405
29443
|
const addIndex = getAddHeaderStartIndex(cmd.position, cmd.base);
|
|
29406
29444
|
const baseSize = sizes[cmd.base];
|
|
29407
|
-
|
|
29445
|
+
const sizesToInsert = range(0, cmd.quantity).map(() => ({
|
|
29446
|
+
manualSize: baseSize.manualSize,
|
|
29447
|
+
computedSize: lazy(baseSize.computedSize()),
|
|
29448
|
+
}));
|
|
29449
|
+
sizes.splice(addIndex, 0, ...sizesToInsert);
|
|
29408
29450
|
sizes = sizes.map((size, row) => {
|
|
29409
29451
|
if (cmd.dimension === "ROW" && row > cmd.base + cmd.quantity) {
|
|
29410
29452
|
// invalidate sizes
|
|
@@ -29620,7 +29662,7 @@
|
|
|
29620
29662
|
if (!this.getters.tryGetSheet(cmd.sheetId)) {
|
|
29621
29663
|
return 27 /* CommandResult.InvalidSheetId */;
|
|
29622
29664
|
}
|
|
29623
|
-
if (
|
|
29665
|
+
if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
29624
29666
|
return 8 /* CommandResult.NotEnoughElements */;
|
|
29625
29667
|
}
|
|
29626
29668
|
return 0 /* CommandResult.Success */;
|
|
@@ -29670,9 +29712,9 @@
|
|
|
29670
29712
|
}
|
|
29671
29713
|
return;
|
|
29672
29714
|
}
|
|
29673
|
-
|
|
29715
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
29674
29716
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
29675
|
-
return
|
|
29717
|
+
return includesAll(elements, visibleHeaders);
|
|
29676
29718
|
}
|
|
29677
29719
|
isRowHiddenByUser(sheetId, index) {
|
|
29678
29720
|
return this.hiddenHeaders[sheetId].ROW[index];
|
|
@@ -29768,7 +29810,7 @@
|
|
|
29768
29810
|
}
|
|
29769
29811
|
}
|
|
29770
29812
|
HeaderVisibilityPlugin.getters = [
|
|
29771
|
-
"
|
|
29813
|
+
"checkElementsIncludeAllVisibleHeaders",
|
|
29772
29814
|
"getHiddenColsGroups",
|
|
29773
29815
|
"getHiddenRowsGroups",
|
|
29774
29816
|
"isRowHiddenByUser",
|
|
@@ -30805,6 +30847,9 @@
|
|
|
30805
30847
|
if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
|
|
30806
30848
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
30807
30849
|
}
|
|
30850
|
+
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
30851
|
+
return 8 /* CommandResult.NotEnoughElements */;
|
|
30852
|
+
}
|
|
30808
30853
|
else {
|
|
30809
30854
|
return 0 /* CommandResult.Success */;
|
|
30810
30855
|
}
|
|
@@ -31091,6 +31136,20 @@
|
|
|
31091
31136
|
}
|
|
31092
31137
|
this.history.update("sheets", sheetId, "panes", panes);
|
|
31093
31138
|
}
|
|
31139
|
+
/**
|
|
31140
|
+
* Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
|
|
31141
|
+
* This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
|
|
31142
|
+
*/
|
|
31143
|
+
checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
|
|
31144
|
+
const paneDivisions = this.getters.getPaneDivisions(sheetId);
|
|
31145
|
+
const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
|
|
31146
|
+
const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
|
|
31147
|
+
if (!startIndex) {
|
|
31148
|
+
return false;
|
|
31149
|
+
}
|
|
31150
|
+
const indicesToCheck = range(startIndex, endIndex);
|
|
31151
|
+
return includesAll(elements, indicesToCheck);
|
|
31152
|
+
}
|
|
31094
31153
|
// ---------------------------------------------------------------------------
|
|
31095
31154
|
// Row/Col manipulation
|
|
31096
31155
|
// ---------------------------------------------------------------------------
|
|
@@ -31619,6 +31678,7 @@
|
|
|
31619
31678
|
"getSheetSize",
|
|
31620
31679
|
"getSheetZone",
|
|
31621
31680
|
"getPaneDivisions",
|
|
31681
|
+
"checkElementsIncludeAllNonFrozenHeaders",
|
|
31622
31682
|
];
|
|
31623
31683
|
|
|
31624
31684
|
/**
|
|
@@ -32185,6 +32245,7 @@
|
|
|
32185
32245
|
// stores the computed styles in the format of computedStyles.sheetName[col][row] = Style
|
|
32186
32246
|
this.computedStyles = {};
|
|
32187
32247
|
this.computedIcons = {};
|
|
32248
|
+
this.uuidGenerator = new UuidGenerator();
|
|
32188
32249
|
/**
|
|
32189
32250
|
* Execute the predicate to know if a conditional formatting rule should be applied to a cell
|
|
32190
32251
|
*/
|
|
@@ -32537,13 +32598,20 @@
|
|
|
32537
32598
|
this.adaptRules(origin.sheetId, cf, [xc], toRemoveRange);
|
|
32538
32599
|
}
|
|
32539
32600
|
else {
|
|
32540
|
-
this.adaptRules(target.sheetId, cf, [xc], []);
|
|
32541
32601
|
this.adaptRules(origin.sheetId, cf, [], toRemoveRange);
|
|
32602
|
+
const cfToCopyTo = this.getCFToCopyTo(target.sheetId, cf);
|
|
32603
|
+
this.adaptRules(target.sheetId, cfToCopyTo, [xc], []);
|
|
32542
32604
|
}
|
|
32543
32605
|
}
|
|
32544
32606
|
}
|
|
32545
32607
|
}
|
|
32546
32608
|
}
|
|
32609
|
+
getCFToCopyTo(targetSheetId, originCF) {
|
|
32610
|
+
const cfInTarget = this.getters
|
|
32611
|
+
.getConditionalFormats(targetSheetId)
|
|
32612
|
+
.find((cf) => cf.stopIfTrue === originCF.stopIfTrue && deepEquals(cf.rule, originCF.rule));
|
|
32613
|
+
return cfInTarget ? cfInTarget : { ...originCF, id: this.uuidGenerator.uuidv4(), ranges: [] };
|
|
32614
|
+
}
|
|
32547
32615
|
}
|
|
32548
32616
|
EvaluationConditionalFormatPlugin.getters = ["getConditionalIcon", "getCellComputedStyle"];
|
|
32549
32617
|
|
|
@@ -32891,30 +32959,26 @@
|
|
|
32891
32959
|
const { end } = this.getters.getColDimensions(sheetId, targetCol);
|
|
32892
32960
|
const maxCol = this.getters.getNumberCols(sheetId);
|
|
32893
32961
|
if (this.offsetX + this.offsetCorrectionX + this.viewportWidth < end) {
|
|
32894
|
-
|
|
32895
|
-
|
|
32896
|
-
|
|
32897
|
-
}
|
|
32898
|
-
if (this.getters.isColHidden(sheetId, col)) {
|
|
32899
|
-
continue;
|
|
32900
|
-
}
|
|
32901
|
-
this.offsetX = this.getters.getColDimensions(sheetId, col).end - this.offsetCorrectionX;
|
|
32902
|
-
this.offsetScrollbarX = this.offsetX;
|
|
32903
|
-
this.adjustViewportZoneX();
|
|
32962
|
+
let finalTarget = targetCol;
|
|
32963
|
+
while (this.getters.isColHidden(sheetId, finalTarget) && targetCol < maxCol) {
|
|
32964
|
+
finalTarget++;
|
|
32904
32965
|
}
|
|
32966
|
+
const finalTargetEnd = this.getters.getColDimensions(sheetId, finalTarget).end;
|
|
32967
|
+
const startIndex = this.searchHeaderIndex("COL", finalTargetEnd - this.viewportWidth - this.offsetCorrectionX, this.boundaries.left, true);
|
|
32968
|
+
this.offsetX =
|
|
32969
|
+
this.getters.getColDimensions(sheetId, startIndex).end - this.offsetCorrectionX;
|
|
32970
|
+
this.offsetScrollbarX = this.offsetX;
|
|
32971
|
+
this.adjustViewportZoneX();
|
|
32905
32972
|
}
|
|
32906
32973
|
else if (this.left > targetCol) {
|
|
32907
|
-
|
|
32908
|
-
|
|
32909
|
-
|
|
32910
|
-
}
|
|
32911
|
-
if (this.getters.isColHidden(sheetId, col)) {
|
|
32912
|
-
continue;
|
|
32913
|
-
}
|
|
32914
|
-
this.offsetX = this.getters.getColDimensions(sheetId, col).start - this.offsetCorrectionX;
|
|
32915
|
-
this.offsetScrollbarX = this.offsetX;
|
|
32916
|
-
this.adjustViewportZoneX();
|
|
32974
|
+
let finalTarget = targetCol;
|
|
32975
|
+
while (this.getters.isColHidden(sheetId, finalTarget) && targetCol > 0) {
|
|
32976
|
+
finalTarget--;
|
|
32917
32977
|
}
|
|
32978
|
+
this.offsetX =
|
|
32979
|
+
this.getters.getColDimensions(sheetId, finalTarget).start - this.offsetCorrectionX;
|
|
32980
|
+
this.offsetScrollbarX = this.offsetX;
|
|
32981
|
+
this.adjustViewportZoneX();
|
|
32918
32982
|
}
|
|
32919
32983
|
}
|
|
32920
32984
|
adjustPositionY(targetRow) {
|
|
@@ -32922,30 +32986,26 @@
|
|
|
32922
32986
|
const { end } = this.getters.getRowDimensions(sheetId, targetRow);
|
|
32923
32987
|
const maxRow = this.getters.getNumberRows(sheetId);
|
|
32924
32988
|
if (this.offsetY + this.viewportHeight + this.offsetCorrectionY < end) {
|
|
32925
|
-
|
|
32926
|
-
|
|
32927
|
-
|
|
32928
|
-
}
|
|
32929
|
-
if (this.getters.isRowHidden(sheetId, row)) {
|
|
32930
|
-
continue;
|
|
32931
|
-
}
|
|
32932
|
-
this.offsetY = this.getters.getRowDimensions(sheetId, row).end - this.offsetCorrectionY;
|
|
32933
|
-
this.offsetScrollbarY = this.offsetY;
|
|
32934
|
-
this.adjustViewportZoneY();
|
|
32989
|
+
let finalTarget = targetRow;
|
|
32990
|
+
while (this.getters.isRowHidden(sheetId, finalTarget) && targetRow < maxRow) {
|
|
32991
|
+
finalTarget++;
|
|
32935
32992
|
}
|
|
32993
|
+
const finalTargetEnd = this.getters.getRowDimensions(sheetId, finalTarget).end;
|
|
32994
|
+
const startIndex = this.searchHeaderIndex("ROW", finalTargetEnd - this.viewportHeight - this.offsetCorrectionY, this.boundaries.top, true);
|
|
32995
|
+
this.offsetY =
|
|
32996
|
+
this.getters.getRowDimensions(sheetId, startIndex).end - this.offsetCorrectionY;
|
|
32997
|
+
this.offsetScrollbarY = this.offsetY;
|
|
32998
|
+
this.adjustViewportZoneY();
|
|
32936
32999
|
}
|
|
32937
33000
|
else if (this.top > targetRow) {
|
|
32938
|
-
|
|
32939
|
-
|
|
32940
|
-
|
|
32941
|
-
}
|
|
32942
|
-
if (this.getters.isRowHidden(sheetId, row)) {
|
|
32943
|
-
continue;
|
|
32944
|
-
}
|
|
32945
|
-
this.offsetY = this.getters.getRowDimensions(sheetId, row).start - this.offsetCorrectionY;
|
|
32946
|
-
this.offsetScrollbarY = this.offsetY;
|
|
32947
|
-
this.adjustViewportZoneY();
|
|
33001
|
+
let finalTarget = targetRow;
|
|
33002
|
+
while (this.getters.isRowHidden(sheetId, finalTarget) && targetRow > 0) {
|
|
33003
|
+
finalTarget--;
|
|
32948
33004
|
}
|
|
33005
|
+
this.offsetY =
|
|
33006
|
+
this.getters.getRowDimensions(sheetId, finalTarget).start - this.offsetCorrectionY;
|
|
33007
|
+
this.offsetScrollbarY = this.offsetY;
|
|
33008
|
+
this.adjustViewportZoneY();
|
|
32949
33009
|
}
|
|
32950
33010
|
}
|
|
32951
33011
|
setViewportOffset(offsetX, offsetY) {
|
|
@@ -33065,6 +33125,9 @@
|
|
|
33065
33125
|
const sheetId = this.sheetId;
|
|
33066
33126
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
33067
33127
|
this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
|
|
33128
|
+
if (this.left === -1) {
|
|
33129
|
+
this.left = this.boundaries.left;
|
|
33130
|
+
}
|
|
33068
33131
|
if (this.right === -1) {
|
|
33069
33132
|
this.right = this.getters.getNumberCols(sheetId) - 1;
|
|
33070
33133
|
}
|
|
@@ -33078,6 +33141,9 @@
|
|
|
33078
33141
|
const sheetId = this.sheetId;
|
|
33079
33142
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
33080
33143
|
this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
|
|
33144
|
+
if (this.top === -1) {
|
|
33145
|
+
this.top = this.boundaries.top;
|
|
33146
|
+
}
|
|
33081
33147
|
if (this.bottom === -1) {
|
|
33082
33148
|
this.bottom = this.getters.getNumberRows(sheetId) - 1;
|
|
33083
33149
|
}
|
|
@@ -34514,14 +34580,10 @@
|
|
|
34514
34580
|
case "REPLACE_ALL_SEARCH":
|
|
34515
34581
|
this.replaceAll(cmd.replaceWith);
|
|
34516
34582
|
break;
|
|
34517
|
-
case "EVALUATE_CELLS":
|
|
34518
|
-
case "UPDATE_CELL":
|
|
34519
|
-
case "REMOVE_FILTER_TABLE":
|
|
34520
|
-
case "UPDATE_FILTER":
|
|
34521
|
-
this.isSearchDirty = true;
|
|
34522
|
-
break;
|
|
34523
34583
|
case "UNDO":
|
|
34524
34584
|
case "REDO":
|
|
34585
|
+
case "REMOVE_FILTER_TABLE":
|
|
34586
|
+
case "UPDATE_FILTER":
|
|
34525
34587
|
case "REMOVE_COLUMNS_ROWS":
|
|
34526
34588
|
case "HIDE_COLUMNS_ROWS":
|
|
34527
34589
|
case "UNHIDE_COLUMNS_ROWS":
|
|
@@ -37521,7 +37583,7 @@
|
|
|
37521
37583
|
});
|
|
37522
37584
|
for (const filterTable of this.copiedTables) {
|
|
37523
37585
|
this.dispatch("REMOVE_FILTER_TABLE", {
|
|
37524
|
-
sheetId: this.
|
|
37586
|
+
sheetId: this.sheetId,
|
|
37525
37587
|
target: [filterTable.zone],
|
|
37526
37588
|
});
|
|
37527
37589
|
}
|
|
@@ -37999,7 +38061,7 @@
|
|
|
37999
38061
|
allowDispatch(cmd) {
|
|
38000
38062
|
switch (cmd.type) {
|
|
38001
38063
|
case "CUT":
|
|
38002
|
-
const zones =
|
|
38064
|
+
const zones = this.getters.getSelectedZones();
|
|
38003
38065
|
const state = this.getClipboardState(zones, cmd.type);
|
|
38004
38066
|
return state.isCutAllowed(zones);
|
|
38005
38067
|
case "PASTE":
|
|
@@ -38030,7 +38092,7 @@
|
|
|
38030
38092
|
switch (cmd.type) {
|
|
38031
38093
|
case "COPY":
|
|
38032
38094
|
case "CUT":
|
|
38033
|
-
const zones =
|
|
38095
|
+
const zones = this.getters.getSelectedZones();
|
|
38034
38096
|
this.state = this.getClipboardState(zones, cmd.type);
|
|
38035
38097
|
this.status = "visible";
|
|
38036
38098
|
break;
|
|
@@ -39410,26 +39472,24 @@
|
|
|
39410
39472
|
const isBasedBefore = cmd.base < start;
|
|
39411
39473
|
const deltaCol = isBasedBefore && isCol ? thickness : 0;
|
|
39412
39474
|
const deltaRow = isBasedBefore && !isCol ? thickness : 0;
|
|
39413
|
-
|
|
39414
|
-
|
|
39415
|
-
|
|
39416
|
-
|
|
39417
|
-
|
|
39418
|
-
|
|
39419
|
-
|
|
39420
|
-
|
|
39421
|
-
|
|
39422
|
-
|
|
39423
|
-
|
|
39424
|
-
|
|
39425
|
-
|
|
39426
|
-
|
|
39427
|
-
|
|
39428
|
-
|
|
39429
|
-
|
|
39430
|
-
|
|
39431
|
-
],
|
|
39432
|
-
});
|
|
39475
|
+
const target = [
|
|
39476
|
+
{
|
|
39477
|
+
left: isCol ? start + deltaCol : 0,
|
|
39478
|
+
right: isCol ? end + deltaCol : this.getters.getNumberCols(cmd.sheetId) - 1,
|
|
39479
|
+
top: !isCol ? start + deltaRow : 0,
|
|
39480
|
+
bottom: !isCol ? end + deltaRow : this.getters.getNumberRows(cmd.sheetId) - 1,
|
|
39481
|
+
},
|
|
39482
|
+
];
|
|
39483
|
+
const state = new ClipboardCellsState(target, "CUT", this.getters, this.dispatch, this.selection);
|
|
39484
|
+
const pasteTarget = [
|
|
39485
|
+
{
|
|
39486
|
+
left: isCol ? cmd.base : 0,
|
|
39487
|
+
right: isCol ? cmd.base + thickness - 1 : this.getters.getNumberCols(cmd.sheetId) - 1,
|
|
39488
|
+
top: !isCol ? cmd.base : 0,
|
|
39489
|
+
bottom: !isCol ? cmd.base + thickness - 1 : this.getters.getNumberRows(cmd.sheetId) - 1,
|
|
39490
|
+
},
|
|
39491
|
+
];
|
|
39492
|
+
state.paste(pasteTarget, { selectTarget: true });
|
|
39433
39493
|
const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
|
|
39434
39494
|
let currentIndex = cmd.base;
|
|
39435
39495
|
for (const element of toRemove) {
|
|
@@ -45399,9 +45459,9 @@
|
|
|
45399
45459
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
45400
45460
|
|
|
45401
45461
|
|
|
45402
|
-
__info__.version = '16.2.
|
|
45403
|
-
__info__.date = '2023-
|
|
45404
|
-
__info__.hash = '
|
|
45462
|
+
__info__.version = '16.2.17';
|
|
45463
|
+
__info__.date = '2023-10-03T12:42:54.642Z';
|
|
45464
|
+
__info__.hash = '146867a';
|
|
45405
45465
|
|
|
45406
45466
|
|
|
45407
45467
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|