@odoo/o-spreadsheet 16.1.19 → 16.1.20
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 +64 -19
- package/dist/o-spreadsheet.d.ts +11 -3
- package/dist/o-spreadsheet.esm.js +64 -19
- package/dist/o-spreadsheet.iife.js +64 -19
- package/dist/o-spreadsheet.iife.min.js +230 -230
- package/package.json +1 -1
|
@@ -4830,6 +4830,7 @@ class LineChart extends AbstractChart {
|
|
|
4830
4830
|
this.labelsAsText = definition.labelsAsText;
|
|
4831
4831
|
this.stacked = definition.stacked;
|
|
4832
4832
|
this.aggregated = definition.aggregated;
|
|
4833
|
+
this.cumulative = definition.cumulative;
|
|
4833
4834
|
}
|
|
4834
4835
|
static validateChartDefinition(validator, definition) {
|
|
4835
4836
|
return validator.checkValidations(definition, checkDataset, checkLabelRange);
|
|
@@ -4850,6 +4851,7 @@ class LineChart extends AbstractChart {
|
|
|
4850
4851
|
labelRange: context.auxiliaryRange || undefined,
|
|
4851
4852
|
stacked: false,
|
|
4852
4853
|
aggregated: false,
|
|
4854
|
+
cumulative: false,
|
|
4853
4855
|
};
|
|
4854
4856
|
}
|
|
4855
4857
|
getDefinition() {
|
|
@@ -4870,6 +4872,7 @@ class LineChart extends AbstractChart {
|
|
|
4870
4872
|
labelsAsText: this.labelsAsText,
|
|
4871
4873
|
stacked: this.stacked,
|
|
4872
4874
|
aggregated: this.aggregated,
|
|
4875
|
+
cumulative: this.cumulative,
|
|
4873
4876
|
};
|
|
4874
4877
|
}
|
|
4875
4878
|
getContextCreation() {
|
|
@@ -5063,6 +5066,16 @@ function createLineChartRuntime(chart, getters) {
|
|
|
5063
5066
|
if (chart.stacked) {
|
|
5064
5067
|
backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
|
|
5065
5068
|
}
|
|
5069
|
+
if (chart.cumulative) {
|
|
5070
|
+
let accumulator = 0;
|
|
5071
|
+
data = data.map((value) => {
|
|
5072
|
+
if (!isNaN(value)) {
|
|
5073
|
+
accumulator += parseFloat(value);
|
|
5074
|
+
return accumulator;
|
|
5075
|
+
}
|
|
5076
|
+
return value;
|
|
5077
|
+
});
|
|
5078
|
+
}
|
|
5066
5079
|
const backgroundColor = rgbaToHex(backgroundRGBA);
|
|
5067
5080
|
const dataset = {
|
|
5068
5081
|
label,
|
|
@@ -6404,6 +6417,7 @@ function getSmartChartDefinition(zone, getters) {
|
|
|
6404
6417
|
labelsAsText: false,
|
|
6405
6418
|
stacked: false,
|
|
6406
6419
|
aggregated: false,
|
|
6420
|
+
cumulative: false,
|
|
6407
6421
|
labelRange: labelRangeXc,
|
|
6408
6422
|
type: "line",
|
|
6409
6423
|
dataSetsHaveTitle,
|
|
@@ -6757,6 +6771,13 @@ const REMOVE_ROWS_ACTION = (env) => {
|
|
|
6757
6771
|
elements: rows,
|
|
6758
6772
|
});
|
|
6759
6773
|
};
|
|
6774
|
+
const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
|
|
6775
|
+
const sheetId = env.model.getters.getActiveSheetId();
|
|
6776
|
+
const selectedElements = env.model.getters.getElementsFromSelection(dimension);
|
|
6777
|
+
const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
|
|
6778
|
+
const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
|
|
6779
|
+
return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
|
|
6780
|
+
};
|
|
6760
6781
|
const REMOVE_COLUMNS_NAME = (env) => {
|
|
6761
6782
|
if (env.model.getters.getSelectedZones().length > 1) {
|
|
6762
6783
|
return _lt("Delete columns");
|
|
@@ -7347,11 +7368,7 @@ colMenuRegistry
|
|
|
7347
7368
|
name: REMOVE_COLUMNS_NAME,
|
|
7348
7369
|
sequence: 90,
|
|
7349
7370
|
action: REMOVE_COLUMNS_ACTION,
|
|
7350
|
-
isVisible: (env) =>
|
|
7351
|
-
const sheetId = env.model.getters.getActiveSheetId();
|
|
7352
|
-
const selectedCols = env.model.getters.getElementsFromSelection("COL");
|
|
7353
|
-
return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
|
|
7354
|
-
},
|
|
7371
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
|
|
7355
7372
|
})
|
|
7356
7373
|
.add("clear_column", {
|
|
7357
7374
|
name: DELETE_CONTENT_COLUMNS_NAME,
|
|
@@ -7365,7 +7382,7 @@ colMenuRegistry
|
|
|
7365
7382
|
isVisible: (env) => {
|
|
7366
7383
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
7367
7384
|
const selectedCols = env.model.getters.getElementsFromSelection("COL");
|
|
7368
|
-
return env.model.getters.
|
|
7385
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
|
|
7369
7386
|
},
|
|
7370
7387
|
separator: true,
|
|
7371
7388
|
})
|
|
@@ -7439,11 +7456,7 @@ rowMenuRegistry
|
|
|
7439
7456
|
name: REMOVE_ROWS_NAME,
|
|
7440
7457
|
sequence: 70,
|
|
7441
7458
|
action: REMOVE_ROWS_ACTION,
|
|
7442
|
-
isVisible: (env) =>
|
|
7443
|
-
const sheetId = env.model.getters.getActiveSheetId();
|
|
7444
|
-
const selectedRows = env.model.getters.getElementsFromSelection("ROW");
|
|
7445
|
-
return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
|
|
7446
|
-
},
|
|
7459
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
|
|
7447
7460
|
})
|
|
7448
7461
|
.add("clear_row", {
|
|
7449
7462
|
name: DELETE_CONTENT_ROWS_NAME,
|
|
@@ -7457,7 +7470,7 @@ rowMenuRegistry
|
|
|
7457
7470
|
isVisible: (env) => {
|
|
7458
7471
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
7459
7472
|
const selectedRows = env.model.getters.getElementsFromSelection("ROW");
|
|
7460
|
-
return env.model.getters.
|
|
7473
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
|
|
7461
7474
|
},
|
|
7462
7475
|
separator: true,
|
|
7463
7476
|
})
|
|
@@ -19334,11 +19347,13 @@ topbarMenuRegistry
|
|
|
19334
19347
|
name: REMOVE_ROWS_NAME,
|
|
19335
19348
|
sequence: 80,
|
|
19336
19349
|
action: REMOVE_ROWS_ACTION,
|
|
19350
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
|
|
19337
19351
|
})
|
|
19338
19352
|
.addChild("edit_delete_column", ["edit"], {
|
|
19339
19353
|
name: REMOVE_COLUMNS_NAME,
|
|
19340
19354
|
sequence: 90,
|
|
19341
19355
|
action: REMOVE_COLUMNS_ACTION,
|
|
19356
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
|
|
19342
19357
|
})
|
|
19343
19358
|
.addChild("edit_delete_cell_shift_up", ["edit"], {
|
|
19344
19359
|
name: _lt("Delete cell and shift up"),
|
|
@@ -20518,6 +20533,11 @@ class LineConfigPanel extends LineBarPieConfigPanel {
|
|
|
20518
20533
|
aggregated: ev.target.checked,
|
|
20519
20534
|
});
|
|
20520
20535
|
}
|
|
20536
|
+
onUpdateCumulative(ev) {
|
|
20537
|
+
this.props.updateChart(this.props.figureId, {
|
|
20538
|
+
cumulative: ev.target.checked,
|
|
20539
|
+
});
|
|
20540
|
+
}
|
|
20521
20541
|
}
|
|
20522
20542
|
LineConfigPanel.template = "o-spreadsheet-LineConfigPanel";
|
|
20523
20543
|
|
|
@@ -25488,6 +25508,7 @@ function convertChartData(chartData) {
|
|
|
25488
25508
|
legendPosition: chartData.legendPosition,
|
|
25489
25509
|
stacked: chartData.stacked || false,
|
|
25490
25510
|
aggregated: false,
|
|
25511
|
+
cumulative: chartData.cumulative || false,
|
|
25491
25512
|
labelsAsText: false,
|
|
25492
25513
|
};
|
|
25493
25514
|
}
|
|
@@ -30052,7 +30073,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
30052
30073
|
if (!this.getters.tryGetSheet(cmd.sheetId)) {
|
|
30053
30074
|
return 27 /* CommandResult.InvalidSheetId */;
|
|
30054
30075
|
}
|
|
30055
|
-
if (
|
|
30076
|
+
if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
30056
30077
|
return 8 /* CommandResult.NotEnoughElements */;
|
|
30057
30078
|
}
|
|
30058
30079
|
return 0 /* CommandResult.Success */;
|
|
@@ -30102,9 +30123,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
30102
30123
|
}
|
|
30103
30124
|
return;
|
|
30104
30125
|
}
|
|
30105
|
-
|
|
30126
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
30106
30127
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
30107
|
-
return
|
|
30128
|
+
return includesAll(elements, visibleHeaders);
|
|
30108
30129
|
}
|
|
30109
30130
|
isRowHiddenByUser(sheetId, index) {
|
|
30110
30131
|
return this.hiddenHeaders[sheetId].ROW[index];
|
|
@@ -30200,7 +30221,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
30200
30221
|
}
|
|
30201
30222
|
}
|
|
30202
30223
|
HeaderVisibilityPlugin.getters = [
|
|
30203
|
-
"
|
|
30224
|
+
"checkElementsIncludeAllVisibleHeaders",
|
|
30204
30225
|
"getHiddenColsGroups",
|
|
30205
30226
|
"getHiddenRowsGroups",
|
|
30206
30227
|
"isRowHiddenByUser",
|
|
@@ -31228,6 +31249,9 @@ class SheetPlugin extends CorePlugin {
|
|
|
31228
31249
|
if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
|
|
31229
31250
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
31230
31251
|
}
|
|
31252
|
+
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
31253
|
+
return 8 /* CommandResult.NotEnoughElements */;
|
|
31254
|
+
}
|
|
31231
31255
|
else {
|
|
31232
31256
|
return 0 /* CommandResult.Success */;
|
|
31233
31257
|
}
|
|
@@ -31514,6 +31538,20 @@ class SheetPlugin extends CorePlugin {
|
|
|
31514
31538
|
}
|
|
31515
31539
|
this.history.update("sheets", sheetId, "panes", panes);
|
|
31516
31540
|
}
|
|
31541
|
+
/**
|
|
31542
|
+
* Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
|
|
31543
|
+
* This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
|
|
31544
|
+
*/
|
|
31545
|
+
checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
|
|
31546
|
+
const paneDivisions = this.getters.getPaneDivisions(sheetId);
|
|
31547
|
+
const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
|
|
31548
|
+
const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
|
|
31549
|
+
if (!startIndex) {
|
|
31550
|
+
return false;
|
|
31551
|
+
}
|
|
31552
|
+
const indicesToCheck = range(startIndex, endIndex);
|
|
31553
|
+
return includesAll(elements, indicesToCheck);
|
|
31554
|
+
}
|
|
31517
31555
|
// ---------------------------------------------------------------------------
|
|
31518
31556
|
// Row/Col manipulation
|
|
31519
31557
|
// ---------------------------------------------------------------------------
|
|
@@ -32046,6 +32084,7 @@ SheetPlugin.getters = [
|
|
|
32046
32084
|
"getSheetSize",
|
|
32047
32085
|
"getSheetZone",
|
|
32048
32086
|
"getPaneDivisions",
|
|
32087
|
+
"checkElementsIncludeAllNonFrozenHeaders",
|
|
32049
32088
|
];
|
|
32050
32089
|
|
|
32051
32090
|
/**
|
|
@@ -33464,6 +33503,9 @@ class InternalViewport {
|
|
|
33464
33503
|
const sheetId = this.sheetId;
|
|
33465
33504
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
33466
33505
|
this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
|
|
33506
|
+
if (this.left === -1) {
|
|
33507
|
+
this.left = this.boundaries.left;
|
|
33508
|
+
}
|
|
33467
33509
|
if (this.right === -1) {
|
|
33468
33510
|
this.right = this.getters.getNumberCols(sheetId) - 1;
|
|
33469
33511
|
}
|
|
@@ -33477,6 +33519,9 @@ class InternalViewport {
|
|
|
33477
33519
|
const sheetId = this.sheetId;
|
|
33478
33520
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
33479
33521
|
this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
|
|
33522
|
+
if (this.top === -1) {
|
|
33523
|
+
this.top = this.boundaries.top;
|
|
33524
|
+
}
|
|
33480
33525
|
if (this.bottom === -1) {
|
|
33481
33526
|
this.bottom = this.getters.getNumberRows(sheetId) - 1;
|
|
33482
33527
|
}
|
|
@@ -44305,6 +44350,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
44305
44350
|
exports.tokenize = tokenize;
|
|
44306
44351
|
|
|
44307
44352
|
|
|
44308
|
-
__info__.version = '16.1.
|
|
44309
|
-
__info__.date = '2023-
|
|
44310
|
-
__info__.hash = '
|
|
44353
|
+
__info__.version = '16.1.20';
|
|
44354
|
+
__info__.date = '2023-09-12T11:43:40.624Z';
|
|
44355
|
+
__info__.hash = '7d7b841';
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -581,6 +581,7 @@ interface LineChartDefinition {
|
|
|
581
581
|
readonly labelsAsText: boolean;
|
|
582
582
|
readonly stacked: boolean;
|
|
583
583
|
readonly aggregated?: boolean;
|
|
584
|
+
readonly cumulative: boolean;
|
|
584
585
|
}
|
|
585
586
|
type LineChartRuntime = {
|
|
586
587
|
chartJsConfig: ChartConfiguration;
|
|
@@ -647,6 +648,7 @@ interface ExcelChartDefinition {
|
|
|
647
648
|
readonly verticalAxisPosition: VerticalAxisPosition;
|
|
648
649
|
readonly legendPosition: LegendPosition;
|
|
649
650
|
readonly stacked?: boolean;
|
|
651
|
+
readonly cumulative?: boolean;
|
|
650
652
|
}
|
|
651
653
|
interface ChartCreationContext {
|
|
652
654
|
readonly range?: string[];
|
|
@@ -3498,11 +3500,11 @@ declare class HeaderSizePlugin extends CorePlugin<HeaderSizeState> implements He
|
|
|
3498
3500
|
}
|
|
3499
3501
|
|
|
3500
3502
|
declare class HeaderVisibilityPlugin extends CorePlugin {
|
|
3501
|
-
static getters: readonly ["
|
|
3503
|
+
static getters: readonly ["checkElementsIncludeAllVisibleHeaders", "getHiddenColsGroups", "getHiddenRowsGroups", "isRowHiddenByUser", "isColHiddenByUser"];
|
|
3502
3504
|
private readonly hiddenHeaders;
|
|
3503
3505
|
allowDispatch(cmd: Command): CommandResult.Success | CommandResult.NotEnoughElements | CommandResult.InvalidSheetId | CommandResult.TooManyHiddenElements | CommandResult.InvalidHeaderIndex;
|
|
3504
3506
|
handle(cmd: Command): void;
|
|
3505
|
-
|
|
3507
|
+
checkElementsIncludeAllVisibleHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
|
|
3506
3508
|
isRowHiddenByUser(sheetId: UID, index: HeaderIndex): boolean;
|
|
3507
3509
|
isColHiddenByUser(sheetId: UID, index: HeaderIndex): boolean;
|
|
3508
3510
|
getHiddenColsGroups(sheetId: UID): ConsecutiveIndexes[];
|
|
@@ -3624,7 +3626,7 @@ interface SheetState {
|
|
|
3624
3626
|
readonly cellPosition: Record<UID, CellPosition | undefined>;
|
|
3625
3627
|
}
|
|
3626
3628
|
declare class SheetPlugin extends CorePlugin<SheetState> implements SheetState {
|
|
3627
|
-
static getters: readonly ["getSheetName", "tryGetSheetName", "getSheet", "tryGetSheet", "getSheetIdByName", "getSheetIds", "getVisibleSheetIds", "isSheetVisible", "getEvaluationSheets", "doesHeaderExist", "getCell", "getCellPosition", "getColsZone", "getRowCells", "getRowsZone", "getNumberCols", "getNumberRows", "getNumberHeaders", "getGridLinesVisibility", "getNextSheetName", "isEmpty", "getSheetSize", "getSheetZone", "getPaneDivisions"];
|
|
3629
|
+
static getters: readonly ["getSheetName", "tryGetSheetName", "getSheet", "tryGetSheet", "getSheetIdByName", "getSheetIds", "getVisibleSheetIds", "isSheetVisible", "getEvaluationSheets", "doesHeaderExist", "getCell", "getCellPosition", "getColsZone", "getRowCells", "getRowsZone", "getNumberCols", "getNumberRows", "getNumberHeaders", "getGridLinesVisibility", "getNextSheetName", "isEmpty", "getSheetSize", "getSheetZone", "getPaneDivisions", "checkElementsIncludeAllNonFrozenHeaders"];
|
|
3628
3630
|
readonly sheetIdsMapName: Record<string, UID | undefined>;
|
|
3629
3631
|
readonly orderedSheetIds: UID[];
|
|
3630
3632
|
readonly sheets: Record<UID, Sheet | undefined>;
|
|
@@ -3666,6 +3668,11 @@ declare class SheetPlugin extends CorePlugin<SheetState> implements SheetState {
|
|
|
3666
3668
|
getSheetZone(sheetId: UID): Zone;
|
|
3667
3669
|
getPaneDivisions(sheetId: UID): Readonly<PaneDivision>;
|
|
3668
3670
|
private setPaneDivisions;
|
|
3671
|
+
/**
|
|
3672
|
+
* Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
|
|
3673
|
+
* This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
|
|
3674
|
+
*/
|
|
3675
|
+
checkElementsIncludeAllNonFrozenHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
|
|
3669
3676
|
/**
|
|
3670
3677
|
* Check if a zone only contains empty cells
|
|
3671
3678
|
*/
|
|
@@ -5163,6 +5170,7 @@ declare class LineConfigPanel extends LineBarPieConfigPanel {
|
|
|
5163
5170
|
onUpdateLabelsAsText(ev: any): void;
|
|
5164
5171
|
onUpdateStacked(ev: any): void;
|
|
5165
5172
|
onUpdateAggregated(ev: any): void;
|
|
5173
|
+
onUpdateCumulative(ev: any): void;
|
|
5166
5174
|
}
|
|
5167
5175
|
|
|
5168
5176
|
interface Props$s {
|
|
@@ -4826,6 +4826,7 @@ class LineChart extends AbstractChart {
|
|
|
4826
4826
|
this.labelsAsText = definition.labelsAsText;
|
|
4827
4827
|
this.stacked = definition.stacked;
|
|
4828
4828
|
this.aggregated = definition.aggregated;
|
|
4829
|
+
this.cumulative = definition.cumulative;
|
|
4829
4830
|
}
|
|
4830
4831
|
static validateChartDefinition(validator, definition) {
|
|
4831
4832
|
return validator.checkValidations(definition, checkDataset, checkLabelRange);
|
|
@@ -4846,6 +4847,7 @@ class LineChart extends AbstractChart {
|
|
|
4846
4847
|
labelRange: context.auxiliaryRange || undefined,
|
|
4847
4848
|
stacked: false,
|
|
4848
4849
|
aggregated: false,
|
|
4850
|
+
cumulative: false,
|
|
4849
4851
|
};
|
|
4850
4852
|
}
|
|
4851
4853
|
getDefinition() {
|
|
@@ -4866,6 +4868,7 @@ class LineChart extends AbstractChart {
|
|
|
4866
4868
|
labelsAsText: this.labelsAsText,
|
|
4867
4869
|
stacked: this.stacked,
|
|
4868
4870
|
aggregated: this.aggregated,
|
|
4871
|
+
cumulative: this.cumulative,
|
|
4869
4872
|
};
|
|
4870
4873
|
}
|
|
4871
4874
|
getContextCreation() {
|
|
@@ -5059,6 +5062,16 @@ function createLineChartRuntime(chart, getters) {
|
|
|
5059
5062
|
if (chart.stacked) {
|
|
5060
5063
|
backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
|
|
5061
5064
|
}
|
|
5065
|
+
if (chart.cumulative) {
|
|
5066
|
+
let accumulator = 0;
|
|
5067
|
+
data = data.map((value) => {
|
|
5068
|
+
if (!isNaN(value)) {
|
|
5069
|
+
accumulator += parseFloat(value);
|
|
5070
|
+
return accumulator;
|
|
5071
|
+
}
|
|
5072
|
+
return value;
|
|
5073
|
+
});
|
|
5074
|
+
}
|
|
5062
5075
|
const backgroundColor = rgbaToHex(backgroundRGBA);
|
|
5063
5076
|
const dataset = {
|
|
5064
5077
|
label,
|
|
@@ -6400,6 +6413,7 @@ function getSmartChartDefinition(zone, getters) {
|
|
|
6400
6413
|
labelsAsText: false,
|
|
6401
6414
|
stacked: false,
|
|
6402
6415
|
aggregated: false,
|
|
6416
|
+
cumulative: false,
|
|
6403
6417
|
labelRange: labelRangeXc,
|
|
6404
6418
|
type: "line",
|
|
6405
6419
|
dataSetsHaveTitle,
|
|
@@ -6753,6 +6767,13 @@ const REMOVE_ROWS_ACTION = (env) => {
|
|
|
6753
6767
|
elements: rows,
|
|
6754
6768
|
});
|
|
6755
6769
|
};
|
|
6770
|
+
const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
|
|
6771
|
+
const sheetId = env.model.getters.getActiveSheetId();
|
|
6772
|
+
const selectedElements = env.model.getters.getElementsFromSelection(dimension);
|
|
6773
|
+
const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
|
|
6774
|
+
const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
|
|
6775
|
+
return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
|
|
6776
|
+
};
|
|
6756
6777
|
const REMOVE_COLUMNS_NAME = (env) => {
|
|
6757
6778
|
if (env.model.getters.getSelectedZones().length > 1) {
|
|
6758
6779
|
return _lt("Delete columns");
|
|
@@ -7343,11 +7364,7 @@ colMenuRegistry
|
|
|
7343
7364
|
name: REMOVE_COLUMNS_NAME,
|
|
7344
7365
|
sequence: 90,
|
|
7345
7366
|
action: REMOVE_COLUMNS_ACTION,
|
|
7346
|
-
isVisible: (env) =>
|
|
7347
|
-
const sheetId = env.model.getters.getActiveSheetId();
|
|
7348
|
-
const selectedCols = env.model.getters.getElementsFromSelection("COL");
|
|
7349
|
-
return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
|
|
7350
|
-
},
|
|
7367
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
|
|
7351
7368
|
})
|
|
7352
7369
|
.add("clear_column", {
|
|
7353
7370
|
name: DELETE_CONTENT_COLUMNS_NAME,
|
|
@@ -7361,7 +7378,7 @@ colMenuRegistry
|
|
|
7361
7378
|
isVisible: (env) => {
|
|
7362
7379
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
7363
7380
|
const selectedCols = env.model.getters.getElementsFromSelection("COL");
|
|
7364
|
-
return env.model.getters.
|
|
7381
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
|
|
7365
7382
|
},
|
|
7366
7383
|
separator: true,
|
|
7367
7384
|
})
|
|
@@ -7435,11 +7452,7 @@ rowMenuRegistry
|
|
|
7435
7452
|
name: REMOVE_ROWS_NAME,
|
|
7436
7453
|
sequence: 70,
|
|
7437
7454
|
action: REMOVE_ROWS_ACTION,
|
|
7438
|
-
isVisible: (env) =>
|
|
7439
|
-
const sheetId = env.model.getters.getActiveSheetId();
|
|
7440
|
-
const selectedRows = env.model.getters.getElementsFromSelection("ROW");
|
|
7441
|
-
return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
|
|
7442
|
-
},
|
|
7455
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
|
|
7443
7456
|
})
|
|
7444
7457
|
.add("clear_row", {
|
|
7445
7458
|
name: DELETE_CONTENT_ROWS_NAME,
|
|
@@ -7453,7 +7466,7 @@ rowMenuRegistry
|
|
|
7453
7466
|
isVisible: (env) => {
|
|
7454
7467
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
7455
7468
|
const selectedRows = env.model.getters.getElementsFromSelection("ROW");
|
|
7456
|
-
return env.model.getters.
|
|
7469
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
|
|
7457
7470
|
},
|
|
7458
7471
|
separator: true,
|
|
7459
7472
|
})
|
|
@@ -19330,11 +19343,13 @@ topbarMenuRegistry
|
|
|
19330
19343
|
name: REMOVE_ROWS_NAME,
|
|
19331
19344
|
sequence: 80,
|
|
19332
19345
|
action: REMOVE_ROWS_ACTION,
|
|
19346
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
|
|
19333
19347
|
})
|
|
19334
19348
|
.addChild("edit_delete_column", ["edit"], {
|
|
19335
19349
|
name: REMOVE_COLUMNS_NAME,
|
|
19336
19350
|
sequence: 90,
|
|
19337
19351
|
action: REMOVE_COLUMNS_ACTION,
|
|
19352
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
|
|
19338
19353
|
})
|
|
19339
19354
|
.addChild("edit_delete_cell_shift_up", ["edit"], {
|
|
19340
19355
|
name: _lt("Delete cell and shift up"),
|
|
@@ -20514,6 +20529,11 @@ class LineConfigPanel extends LineBarPieConfigPanel {
|
|
|
20514
20529
|
aggregated: ev.target.checked,
|
|
20515
20530
|
});
|
|
20516
20531
|
}
|
|
20532
|
+
onUpdateCumulative(ev) {
|
|
20533
|
+
this.props.updateChart(this.props.figureId, {
|
|
20534
|
+
cumulative: ev.target.checked,
|
|
20535
|
+
});
|
|
20536
|
+
}
|
|
20517
20537
|
}
|
|
20518
20538
|
LineConfigPanel.template = "o-spreadsheet-LineConfigPanel";
|
|
20519
20539
|
|
|
@@ -25484,6 +25504,7 @@ function convertChartData(chartData) {
|
|
|
25484
25504
|
legendPosition: chartData.legendPosition,
|
|
25485
25505
|
stacked: chartData.stacked || false,
|
|
25486
25506
|
aggregated: false,
|
|
25507
|
+
cumulative: chartData.cumulative || false,
|
|
25487
25508
|
labelsAsText: false,
|
|
25488
25509
|
};
|
|
25489
25510
|
}
|
|
@@ -30048,7 +30069,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
30048
30069
|
if (!this.getters.tryGetSheet(cmd.sheetId)) {
|
|
30049
30070
|
return 27 /* CommandResult.InvalidSheetId */;
|
|
30050
30071
|
}
|
|
30051
|
-
if (
|
|
30072
|
+
if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
30052
30073
|
return 8 /* CommandResult.NotEnoughElements */;
|
|
30053
30074
|
}
|
|
30054
30075
|
return 0 /* CommandResult.Success */;
|
|
@@ -30098,9 +30119,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
30098
30119
|
}
|
|
30099
30120
|
return;
|
|
30100
30121
|
}
|
|
30101
|
-
|
|
30122
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
30102
30123
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
30103
|
-
return
|
|
30124
|
+
return includesAll(elements, visibleHeaders);
|
|
30104
30125
|
}
|
|
30105
30126
|
isRowHiddenByUser(sheetId, index) {
|
|
30106
30127
|
return this.hiddenHeaders[sheetId].ROW[index];
|
|
@@ -30196,7 +30217,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
30196
30217
|
}
|
|
30197
30218
|
}
|
|
30198
30219
|
HeaderVisibilityPlugin.getters = [
|
|
30199
|
-
"
|
|
30220
|
+
"checkElementsIncludeAllVisibleHeaders",
|
|
30200
30221
|
"getHiddenColsGroups",
|
|
30201
30222
|
"getHiddenRowsGroups",
|
|
30202
30223
|
"isRowHiddenByUser",
|
|
@@ -31224,6 +31245,9 @@ class SheetPlugin extends CorePlugin {
|
|
|
31224
31245
|
if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
|
|
31225
31246
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
31226
31247
|
}
|
|
31248
|
+
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
31249
|
+
return 8 /* CommandResult.NotEnoughElements */;
|
|
31250
|
+
}
|
|
31227
31251
|
else {
|
|
31228
31252
|
return 0 /* CommandResult.Success */;
|
|
31229
31253
|
}
|
|
@@ -31510,6 +31534,20 @@ class SheetPlugin extends CorePlugin {
|
|
|
31510
31534
|
}
|
|
31511
31535
|
this.history.update("sheets", sheetId, "panes", panes);
|
|
31512
31536
|
}
|
|
31537
|
+
/**
|
|
31538
|
+
* Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
|
|
31539
|
+
* This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
|
|
31540
|
+
*/
|
|
31541
|
+
checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
|
|
31542
|
+
const paneDivisions = this.getters.getPaneDivisions(sheetId);
|
|
31543
|
+
const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
|
|
31544
|
+
const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
|
|
31545
|
+
if (!startIndex) {
|
|
31546
|
+
return false;
|
|
31547
|
+
}
|
|
31548
|
+
const indicesToCheck = range(startIndex, endIndex);
|
|
31549
|
+
return includesAll(elements, indicesToCheck);
|
|
31550
|
+
}
|
|
31513
31551
|
// ---------------------------------------------------------------------------
|
|
31514
31552
|
// Row/Col manipulation
|
|
31515
31553
|
// ---------------------------------------------------------------------------
|
|
@@ -32042,6 +32080,7 @@ SheetPlugin.getters = [
|
|
|
32042
32080
|
"getSheetSize",
|
|
32043
32081
|
"getSheetZone",
|
|
32044
32082
|
"getPaneDivisions",
|
|
32083
|
+
"checkElementsIncludeAllNonFrozenHeaders",
|
|
32045
32084
|
];
|
|
32046
32085
|
|
|
32047
32086
|
/**
|
|
@@ -33460,6 +33499,9 @@ class InternalViewport {
|
|
|
33460
33499
|
const sheetId = this.sheetId;
|
|
33461
33500
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
33462
33501
|
this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
|
|
33502
|
+
if (this.left === -1) {
|
|
33503
|
+
this.left = this.boundaries.left;
|
|
33504
|
+
}
|
|
33463
33505
|
if (this.right === -1) {
|
|
33464
33506
|
this.right = this.getters.getNumberCols(sheetId) - 1;
|
|
33465
33507
|
}
|
|
@@ -33473,6 +33515,9 @@ class InternalViewport {
|
|
|
33473
33515
|
const sheetId = this.sheetId;
|
|
33474
33516
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
33475
33517
|
this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
|
|
33518
|
+
if (this.top === -1) {
|
|
33519
|
+
this.top = this.boundaries.top;
|
|
33520
|
+
}
|
|
33476
33521
|
if (this.bottom === -1) {
|
|
33477
33522
|
this.bottom = this.getters.getNumberRows(sheetId) - 1;
|
|
33478
33523
|
}
|
|
@@ -44273,6 +44318,6 @@ function addFunction(functionName, functionDescription) {
|
|
|
44273
44318
|
export { AbstractChart, CommandResult, CorePlugin, DATETIME_FORMAT, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, compile, components, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, invalidateEvaluationCommands, links, load, parse, readonlyAllowedCommands, registries, setTranslationMethod, tokenize };
|
|
44274
44319
|
|
|
44275
44320
|
|
|
44276
|
-
__info__.version = '16.1.
|
|
44277
|
-
__info__.date = '2023-
|
|
44278
|
-
__info__.hash = '
|
|
44321
|
+
__info__.version = '16.1.20';
|
|
44322
|
+
__info__.date = '2023-09-12T11:43:40.624Z';
|
|
44323
|
+
__info__.hash = '7d7b841';
|