@odoo/o-spreadsheet 16.4.5 → 16.4.6
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 +63 -11
- package/dist/o-spreadsheet.d.ts +11 -3
- package/dist/o-spreadsheet.esm.js +63 -11
- package/dist/o-spreadsheet.iife.js +63 -11
- package/dist/o-spreadsheet.iife.min.js +76 -76
- package/package.json +1 -1
|
@@ -16878,6 +16878,7 @@ class LineChart extends AbstractChart {
|
|
|
16878
16878
|
aggregated;
|
|
16879
16879
|
type = "line";
|
|
16880
16880
|
dataSetsHaveTitle;
|
|
16881
|
+
cumulative;
|
|
16881
16882
|
constructor(definition, sheetId, getters) {
|
|
16882
16883
|
super(definition, sheetId, getters);
|
|
16883
16884
|
this.dataSets = createDataSets(this.getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
|
|
@@ -16889,6 +16890,7 @@ class LineChart extends AbstractChart {
|
|
|
16889
16890
|
this.stacked = definition.stacked;
|
|
16890
16891
|
this.aggregated = definition.aggregated;
|
|
16891
16892
|
this.dataSetsHaveTitle = definition.dataSetsHaveTitle;
|
|
16893
|
+
this.cumulative = definition.cumulative;
|
|
16892
16894
|
}
|
|
16893
16895
|
static validateChartDefinition(validator, definition) {
|
|
16894
16896
|
return validator.checkValidations(definition, checkDataset, checkLabelRange);
|
|
@@ -16909,6 +16911,7 @@ class LineChart extends AbstractChart {
|
|
|
16909
16911
|
labelRange: context.auxiliaryRange || undefined,
|
|
16910
16912
|
stacked: false,
|
|
16911
16913
|
aggregated: false,
|
|
16914
|
+
cumulative: false,
|
|
16912
16915
|
};
|
|
16913
16916
|
}
|
|
16914
16917
|
getDefinition() {
|
|
@@ -16929,6 +16932,7 @@ class LineChart extends AbstractChart {
|
|
|
16929
16932
|
labelsAsText: this.labelsAsText,
|
|
16930
16933
|
stacked: this.stacked,
|
|
16931
16934
|
aggregated: this.aggregated,
|
|
16935
|
+
cumulative: this.cumulative,
|
|
16932
16936
|
};
|
|
16933
16937
|
}
|
|
16934
16938
|
getContextCreation() {
|
|
@@ -17139,6 +17143,16 @@ function createLineChartRuntime(chart, getters) {
|
|
|
17139
17143
|
if (chart.stacked) {
|
|
17140
17144
|
backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
|
|
17141
17145
|
}
|
|
17146
|
+
if (chart.cumulative) {
|
|
17147
|
+
let accumulator = 0;
|
|
17148
|
+
data = data.map((value) => {
|
|
17149
|
+
if (!isNaN(value)) {
|
|
17150
|
+
accumulator += parseFloat(value);
|
|
17151
|
+
return accumulator;
|
|
17152
|
+
}
|
|
17153
|
+
return value;
|
|
17154
|
+
});
|
|
17155
|
+
}
|
|
17142
17156
|
const backgroundColor = rgbaToHex(backgroundRGBA);
|
|
17143
17157
|
const dataset = {
|
|
17144
17158
|
label,
|
|
@@ -18013,6 +18027,7 @@ function getSmartChartDefinition(zone, getters) {
|
|
|
18013
18027
|
labelsAsText: false,
|
|
18014
18028
|
stacked: false,
|
|
18015
18029
|
aggregated: false,
|
|
18030
|
+
cumulative: false,
|
|
18016
18031
|
labelRange: labelRangeXc,
|
|
18017
18032
|
type: "line",
|
|
18018
18033
|
dataSetsHaveTitle,
|
|
@@ -18176,6 +18191,13 @@ const REMOVE_ROWS_ACTION = (env) => {
|
|
|
18176
18191
|
elements: rows,
|
|
18177
18192
|
});
|
|
18178
18193
|
};
|
|
18194
|
+
const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
|
|
18195
|
+
const sheetId = env.model.getters.getActiveSheetId();
|
|
18196
|
+
const selectedElements = env.model.getters.getElementsFromSelection(dimension);
|
|
18197
|
+
const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
|
|
18198
|
+
const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
|
|
18199
|
+
return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
|
|
18200
|
+
};
|
|
18179
18201
|
const REMOVE_COLUMNS_NAME = (env) => {
|
|
18180
18202
|
if (env.model.getters.getSelectedZones().length > 1) {
|
|
18181
18203
|
return _lt("Delete columns");
|
|
@@ -18200,7 +18222,7 @@ const REMOVE_COLUMNS_NAME = (env) => {
|
|
|
18200
18222
|
const NOT_ALL_VISIBLE_ROWS_SELECTED = (env) => {
|
|
18201
18223
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
18202
18224
|
const selectedRows = env.model.getters.getElementsFromSelection("ROW");
|
|
18203
|
-
return env.model.getters.
|
|
18225
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
|
|
18204
18226
|
};
|
|
18205
18227
|
const REMOVE_COLUMNS_ACTION = (env) => {
|
|
18206
18228
|
let columns = [...env.model.getters.getActiveCols()];
|
|
@@ -18219,7 +18241,7 @@ const REMOVE_COLUMNS_ACTION = (env) => {
|
|
|
18219
18241
|
const NOT_ALL_VISIBLE_COLS_SELECTED = (env) => {
|
|
18220
18242
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
18221
18243
|
const selectedCols = env.model.getters.getElementsFromSelection("COL");
|
|
18222
|
-
return env.model.getters.
|
|
18244
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
|
|
18223
18245
|
};
|
|
18224
18246
|
const INSERT_ROWS_BEFORE_ACTION = (env) => {
|
|
18225
18247
|
const activeRows = env.model.getters.getActiveRows();
|
|
@@ -18491,7 +18513,7 @@ const deleteValues = {
|
|
|
18491
18513
|
const deleteRows = {
|
|
18492
18514
|
name: REMOVE_ROWS_NAME,
|
|
18493
18515
|
execute: REMOVE_ROWS_ACTION,
|
|
18494
|
-
isVisible:
|
|
18516
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
|
|
18495
18517
|
};
|
|
18496
18518
|
const deleteRow = {
|
|
18497
18519
|
...deleteRows,
|
|
@@ -18504,7 +18526,7 @@ const clearRows = {
|
|
|
18504
18526
|
const deleteCols = {
|
|
18505
18527
|
name: REMOVE_COLUMNS_NAME,
|
|
18506
18528
|
execute: REMOVE_COLUMNS_ACTION,
|
|
18507
|
-
isVisible:
|
|
18529
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
|
|
18508
18530
|
};
|
|
18509
18531
|
const deleteCol = {
|
|
18510
18532
|
...deleteCols,
|
|
@@ -21479,6 +21501,11 @@ class LineConfigPanel extends LineBarPieConfigPanel {
|
|
|
21479
21501
|
aggregated: ev.target.checked,
|
|
21480
21502
|
});
|
|
21481
21503
|
}
|
|
21504
|
+
onUpdateCumulative(ev) {
|
|
21505
|
+
this.props.updateChart(this.props.figureId, {
|
|
21506
|
+
cumulative: ev.target.checked,
|
|
21507
|
+
});
|
|
21508
|
+
}
|
|
21482
21509
|
}
|
|
21483
21510
|
|
|
21484
21511
|
class LineChartDesignPanel extends LineBarPieDesignPanel {
|
|
@@ -28452,6 +28479,7 @@ function convertChartData(chartData) {
|
|
|
28452
28479
|
legendPosition: chartData.legendPosition,
|
|
28453
28480
|
stacked: chartData.stacked || false,
|
|
28454
28481
|
aggregated: false,
|
|
28482
|
+
cumulative: chartData.cumulative || false,
|
|
28455
28483
|
labelsAsText: false,
|
|
28456
28484
|
};
|
|
28457
28485
|
}
|
|
@@ -33112,7 +33140,7 @@ class HeaderSizePlugin extends CorePlugin {
|
|
|
33112
33140
|
|
|
33113
33141
|
class HeaderVisibilityPlugin extends CorePlugin {
|
|
33114
33142
|
static getters = [
|
|
33115
|
-
"
|
|
33143
|
+
"checkElementsIncludeAllVisibleHeaders",
|
|
33116
33144
|
"getHiddenColsGroups",
|
|
33117
33145
|
"getHiddenRowsGroups",
|
|
33118
33146
|
"isRowHiddenByUser",
|
|
@@ -33146,7 +33174,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
33146
33174
|
if (!this.getters.tryGetSheet(cmd.sheetId)) {
|
|
33147
33175
|
return 28 /* CommandResult.InvalidSheetId */;
|
|
33148
33176
|
}
|
|
33149
|
-
if (
|
|
33177
|
+
if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
33150
33178
|
return 8 /* CommandResult.NotEnoughElements */;
|
|
33151
33179
|
}
|
|
33152
33180
|
return 0 /* CommandResult.Success */;
|
|
@@ -33196,9 +33224,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
33196
33224
|
}
|
|
33197
33225
|
return;
|
|
33198
33226
|
}
|
|
33199
|
-
|
|
33227
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
33200
33228
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
33201
|
-
return
|
|
33229
|
+
return includesAll(elements, visibleHeaders);
|
|
33202
33230
|
}
|
|
33203
33231
|
isRowHiddenByUser(sheetId, index) {
|
|
33204
33232
|
return this.hiddenHeaders[sheetId].ROW[index];
|
|
@@ -34303,6 +34331,7 @@ class SheetPlugin extends CorePlugin {
|
|
|
34303
34331
|
"checkZonesExistInSheet",
|
|
34304
34332
|
"getCommandZones",
|
|
34305
34333
|
"getUnboundedZone",
|
|
34334
|
+
"checkElementsIncludeAllNonFrozenHeaders",
|
|
34306
34335
|
];
|
|
34307
34336
|
sheetIdsMapName = {};
|
|
34308
34337
|
orderedSheetIds = [];
|
|
@@ -34359,6 +34388,9 @@ class SheetPlugin extends CorePlugin {
|
|
|
34359
34388
|
if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
|
|
34360
34389
|
return 87 /* CommandResult.InvalidHeaderIndex */;
|
|
34361
34390
|
}
|
|
34391
|
+
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
34392
|
+
return 8 /* CommandResult.NotEnoughElements */;
|
|
34393
|
+
}
|
|
34362
34394
|
else {
|
|
34363
34395
|
return 0 /* CommandResult.Success */;
|
|
34364
34396
|
}
|
|
@@ -34651,6 +34683,20 @@ class SheetPlugin extends CorePlugin {
|
|
|
34651
34683
|
}
|
|
34652
34684
|
this.history.update("sheets", sheetId, "panes", panes);
|
|
34653
34685
|
}
|
|
34686
|
+
/**
|
|
34687
|
+
* Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
|
|
34688
|
+
* This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
|
|
34689
|
+
*/
|
|
34690
|
+
checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
|
|
34691
|
+
const paneDivisions = this.getters.getPaneDivisions(sheetId);
|
|
34692
|
+
const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
|
|
34693
|
+
const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
|
|
34694
|
+
if (!startIndex) {
|
|
34695
|
+
return false;
|
|
34696
|
+
}
|
|
34697
|
+
const indicesToCheck = range(startIndex, endIndex);
|
|
34698
|
+
return includesAll(elements, indicesToCheck);
|
|
34699
|
+
}
|
|
34654
34700
|
// ---------------------------------------------------------------------------
|
|
34655
34701
|
// Row/Col manipulation
|
|
34656
34702
|
// ---------------------------------------------------------------------------
|
|
@@ -43937,6 +43983,9 @@ class InternalViewport {
|
|
|
43937
43983
|
const sheetId = this.sheetId;
|
|
43938
43984
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
43939
43985
|
this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
|
|
43986
|
+
if (this.left === -1) {
|
|
43987
|
+
this.left = this.boundaries.left;
|
|
43988
|
+
}
|
|
43940
43989
|
if (this.right === -1) {
|
|
43941
43990
|
this.right = this.getters.getNumberCols(sheetId) - 1;
|
|
43942
43991
|
}
|
|
@@ -43950,6 +43999,9 @@ class InternalViewport {
|
|
|
43950
43999
|
const sheetId = this.sheetId;
|
|
43951
44000
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
43952
44001
|
this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
|
|
44002
|
+
if (this.top === -1) {
|
|
44003
|
+
this.top = this.boundaries.top;
|
|
44004
|
+
}
|
|
43953
44005
|
if (this.bottom === -1) {
|
|
43954
44006
|
this.bottom = this.getters.getNumberRows(sheetId) - 1;
|
|
43955
44007
|
}
|
|
@@ -50550,6 +50602,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
50550
50602
|
exports.tokenize = tokenize;
|
|
50551
50603
|
|
|
50552
50604
|
|
|
50553
|
-
__info__.version = '16.4.
|
|
50554
|
-
__info__.date = '2023-
|
|
50555
|
-
__info__.hash = '
|
|
50605
|
+
__info__.version = '16.4.6';
|
|
50606
|
+
__info__.date = '2023-09-12T11:43:54.243Z';
|
|
50607
|
+
__info__.hash = '5746355';
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -424,6 +424,7 @@ interface LineChartDefinition {
|
|
|
424
424
|
readonly labelsAsText: boolean;
|
|
425
425
|
readonly stacked: boolean;
|
|
426
426
|
readonly aggregated?: boolean;
|
|
427
|
+
readonly cumulative: boolean;
|
|
427
428
|
}
|
|
428
429
|
type LineChartRuntime = {
|
|
429
430
|
chartJsConfig: ChartConfiguration;
|
|
@@ -490,6 +491,7 @@ interface ExcelChartDefinition {
|
|
|
490
491
|
readonly verticalAxisPosition: VerticalAxisPosition;
|
|
491
492
|
readonly legendPosition: LegendPosition;
|
|
492
493
|
readonly stacked?: boolean;
|
|
494
|
+
readonly cumulative?: boolean;
|
|
493
495
|
}
|
|
494
496
|
interface ChartCreationContext {
|
|
495
497
|
readonly range?: string[];
|
|
@@ -3462,11 +3464,11 @@ declare class HeaderSizePlugin extends CorePlugin<HeaderSizeState$1> implements
|
|
|
3462
3464
|
}
|
|
3463
3465
|
|
|
3464
3466
|
declare class HeaderVisibilityPlugin extends CorePlugin {
|
|
3465
|
-
static getters: readonly ["
|
|
3467
|
+
static getters: readonly ["checkElementsIncludeAllVisibleHeaders", "getHiddenColsGroups", "getHiddenRowsGroups", "isRowHiddenByUser", "isColHiddenByUser"];
|
|
3466
3468
|
private readonly hiddenHeaders;
|
|
3467
3469
|
allowDispatch(cmd: Command): CommandResult.Success | CommandResult.NotEnoughElements | CommandResult.InvalidSheetId | CommandResult.TooManyHiddenElements | CommandResult.InvalidHeaderIndex;
|
|
3468
3470
|
handle(cmd: Command): void;
|
|
3469
|
-
|
|
3471
|
+
checkElementsIncludeAllVisibleHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
|
|
3470
3472
|
isRowHiddenByUser(sheetId: UID, index: HeaderIndex): boolean;
|
|
3471
3473
|
isColHiddenByUser(sheetId: UID, index: HeaderIndex): boolean;
|
|
3472
3474
|
getHiddenColsGroups(sheetId: UID): ConsecutiveIndexes[];
|
|
@@ -3603,7 +3605,7 @@ interface SheetState$1 {
|
|
|
3603
3605
|
readonly cellPosition: Record<UID, CellPosition | undefined>;
|
|
3604
3606
|
}
|
|
3605
3607
|
declare class SheetPlugin extends CorePlugin<SheetState$1> implements SheetState$1 {
|
|
3606
|
-
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", "checkZonesExistInSheet", "getCommandZones", "getUnboundedZone"];
|
|
3608
|
+
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", "checkZonesExistInSheet", "getCommandZones", "getUnboundedZone", "checkElementsIncludeAllNonFrozenHeaders"];
|
|
3607
3609
|
readonly sheetIdsMapName: Record<string, UID | undefined>;
|
|
3608
3610
|
readonly orderedSheetIds: UID[];
|
|
3609
3611
|
readonly sheets: Record<UID, Sheet | undefined>;
|
|
@@ -3646,6 +3648,11 @@ declare class SheetPlugin extends CorePlugin<SheetState$1> implements SheetState
|
|
|
3646
3648
|
getUnboundedZone(sheetId: UID, zone: Zone): UnboundedZone;
|
|
3647
3649
|
getPaneDivisions(sheetId: UID): Readonly<PaneDivision>;
|
|
3648
3650
|
private setPaneDivisions;
|
|
3651
|
+
/**
|
|
3652
|
+
* Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
|
|
3653
|
+
* This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
|
|
3654
|
+
*/
|
|
3655
|
+
checkElementsIncludeAllNonFrozenHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
|
|
3649
3656
|
/**
|
|
3650
3657
|
* Check if a zone only contains empty cells
|
|
3651
3658
|
*/
|
|
@@ -5354,6 +5361,7 @@ declare class LineConfigPanel extends LineBarPieConfigPanel {
|
|
|
5354
5361
|
onUpdateLabelsAsText(ev: any): void;
|
|
5355
5362
|
onUpdateStacked(ev: any): void;
|
|
5356
5363
|
onUpdateAggregated(ev: any): void;
|
|
5364
|
+
onUpdateCumulative(ev: any): void;
|
|
5357
5365
|
}
|
|
5358
5366
|
|
|
5359
5367
|
interface Props$y {
|
|
@@ -16874,6 +16874,7 @@ class LineChart extends AbstractChart {
|
|
|
16874
16874
|
aggregated;
|
|
16875
16875
|
type = "line";
|
|
16876
16876
|
dataSetsHaveTitle;
|
|
16877
|
+
cumulative;
|
|
16877
16878
|
constructor(definition, sheetId, getters) {
|
|
16878
16879
|
super(definition, sheetId, getters);
|
|
16879
16880
|
this.dataSets = createDataSets(this.getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
|
|
@@ -16885,6 +16886,7 @@ class LineChart extends AbstractChart {
|
|
|
16885
16886
|
this.stacked = definition.stacked;
|
|
16886
16887
|
this.aggregated = definition.aggregated;
|
|
16887
16888
|
this.dataSetsHaveTitle = definition.dataSetsHaveTitle;
|
|
16889
|
+
this.cumulative = definition.cumulative;
|
|
16888
16890
|
}
|
|
16889
16891
|
static validateChartDefinition(validator, definition) {
|
|
16890
16892
|
return validator.checkValidations(definition, checkDataset, checkLabelRange);
|
|
@@ -16905,6 +16907,7 @@ class LineChart extends AbstractChart {
|
|
|
16905
16907
|
labelRange: context.auxiliaryRange || undefined,
|
|
16906
16908
|
stacked: false,
|
|
16907
16909
|
aggregated: false,
|
|
16910
|
+
cumulative: false,
|
|
16908
16911
|
};
|
|
16909
16912
|
}
|
|
16910
16913
|
getDefinition() {
|
|
@@ -16925,6 +16928,7 @@ class LineChart extends AbstractChart {
|
|
|
16925
16928
|
labelsAsText: this.labelsAsText,
|
|
16926
16929
|
stacked: this.stacked,
|
|
16927
16930
|
aggregated: this.aggregated,
|
|
16931
|
+
cumulative: this.cumulative,
|
|
16928
16932
|
};
|
|
16929
16933
|
}
|
|
16930
16934
|
getContextCreation() {
|
|
@@ -17135,6 +17139,16 @@ function createLineChartRuntime(chart, getters) {
|
|
|
17135
17139
|
if (chart.stacked) {
|
|
17136
17140
|
backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
|
|
17137
17141
|
}
|
|
17142
|
+
if (chart.cumulative) {
|
|
17143
|
+
let accumulator = 0;
|
|
17144
|
+
data = data.map((value) => {
|
|
17145
|
+
if (!isNaN(value)) {
|
|
17146
|
+
accumulator += parseFloat(value);
|
|
17147
|
+
return accumulator;
|
|
17148
|
+
}
|
|
17149
|
+
return value;
|
|
17150
|
+
});
|
|
17151
|
+
}
|
|
17138
17152
|
const backgroundColor = rgbaToHex(backgroundRGBA);
|
|
17139
17153
|
const dataset = {
|
|
17140
17154
|
label,
|
|
@@ -18009,6 +18023,7 @@ function getSmartChartDefinition(zone, getters) {
|
|
|
18009
18023
|
labelsAsText: false,
|
|
18010
18024
|
stacked: false,
|
|
18011
18025
|
aggregated: false,
|
|
18026
|
+
cumulative: false,
|
|
18012
18027
|
labelRange: labelRangeXc,
|
|
18013
18028
|
type: "line",
|
|
18014
18029
|
dataSetsHaveTitle,
|
|
@@ -18172,6 +18187,13 @@ const REMOVE_ROWS_ACTION = (env) => {
|
|
|
18172
18187
|
elements: rows,
|
|
18173
18188
|
});
|
|
18174
18189
|
};
|
|
18190
|
+
const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
|
|
18191
|
+
const sheetId = env.model.getters.getActiveSheetId();
|
|
18192
|
+
const selectedElements = env.model.getters.getElementsFromSelection(dimension);
|
|
18193
|
+
const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
|
|
18194
|
+
const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
|
|
18195
|
+
return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
|
|
18196
|
+
};
|
|
18175
18197
|
const REMOVE_COLUMNS_NAME = (env) => {
|
|
18176
18198
|
if (env.model.getters.getSelectedZones().length > 1) {
|
|
18177
18199
|
return _lt("Delete columns");
|
|
@@ -18196,7 +18218,7 @@ const REMOVE_COLUMNS_NAME = (env) => {
|
|
|
18196
18218
|
const NOT_ALL_VISIBLE_ROWS_SELECTED = (env) => {
|
|
18197
18219
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
18198
18220
|
const selectedRows = env.model.getters.getElementsFromSelection("ROW");
|
|
18199
|
-
return env.model.getters.
|
|
18221
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
|
|
18200
18222
|
};
|
|
18201
18223
|
const REMOVE_COLUMNS_ACTION = (env) => {
|
|
18202
18224
|
let columns = [...env.model.getters.getActiveCols()];
|
|
@@ -18215,7 +18237,7 @@ const REMOVE_COLUMNS_ACTION = (env) => {
|
|
|
18215
18237
|
const NOT_ALL_VISIBLE_COLS_SELECTED = (env) => {
|
|
18216
18238
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
18217
18239
|
const selectedCols = env.model.getters.getElementsFromSelection("COL");
|
|
18218
|
-
return env.model.getters.
|
|
18240
|
+
return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
|
|
18219
18241
|
};
|
|
18220
18242
|
const INSERT_ROWS_BEFORE_ACTION = (env) => {
|
|
18221
18243
|
const activeRows = env.model.getters.getActiveRows();
|
|
@@ -18487,7 +18509,7 @@ const deleteValues = {
|
|
|
18487
18509
|
const deleteRows = {
|
|
18488
18510
|
name: REMOVE_ROWS_NAME,
|
|
18489
18511
|
execute: REMOVE_ROWS_ACTION,
|
|
18490
|
-
isVisible:
|
|
18512
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
|
|
18491
18513
|
};
|
|
18492
18514
|
const deleteRow = {
|
|
18493
18515
|
...deleteRows,
|
|
@@ -18500,7 +18522,7 @@ const clearRows = {
|
|
|
18500
18522
|
const deleteCols = {
|
|
18501
18523
|
name: REMOVE_COLUMNS_NAME,
|
|
18502
18524
|
execute: REMOVE_COLUMNS_ACTION,
|
|
18503
|
-
isVisible:
|
|
18525
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
|
|
18504
18526
|
};
|
|
18505
18527
|
const deleteCol = {
|
|
18506
18528
|
...deleteCols,
|
|
@@ -21475,6 +21497,11 @@ class LineConfigPanel extends LineBarPieConfigPanel {
|
|
|
21475
21497
|
aggregated: ev.target.checked,
|
|
21476
21498
|
});
|
|
21477
21499
|
}
|
|
21500
|
+
onUpdateCumulative(ev) {
|
|
21501
|
+
this.props.updateChart(this.props.figureId, {
|
|
21502
|
+
cumulative: ev.target.checked,
|
|
21503
|
+
});
|
|
21504
|
+
}
|
|
21478
21505
|
}
|
|
21479
21506
|
|
|
21480
21507
|
class LineChartDesignPanel extends LineBarPieDesignPanel {
|
|
@@ -28448,6 +28475,7 @@ function convertChartData(chartData) {
|
|
|
28448
28475
|
legendPosition: chartData.legendPosition,
|
|
28449
28476
|
stacked: chartData.stacked || false,
|
|
28450
28477
|
aggregated: false,
|
|
28478
|
+
cumulative: chartData.cumulative || false,
|
|
28451
28479
|
labelsAsText: false,
|
|
28452
28480
|
};
|
|
28453
28481
|
}
|
|
@@ -33108,7 +33136,7 @@ class HeaderSizePlugin extends CorePlugin {
|
|
|
33108
33136
|
|
|
33109
33137
|
class HeaderVisibilityPlugin extends CorePlugin {
|
|
33110
33138
|
static getters = [
|
|
33111
|
-
"
|
|
33139
|
+
"checkElementsIncludeAllVisibleHeaders",
|
|
33112
33140
|
"getHiddenColsGroups",
|
|
33113
33141
|
"getHiddenRowsGroups",
|
|
33114
33142
|
"isRowHiddenByUser",
|
|
@@ -33142,7 +33170,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
33142
33170
|
if (!this.getters.tryGetSheet(cmd.sheetId)) {
|
|
33143
33171
|
return 28 /* CommandResult.InvalidSheetId */;
|
|
33144
33172
|
}
|
|
33145
|
-
if (
|
|
33173
|
+
if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
33146
33174
|
return 8 /* CommandResult.NotEnoughElements */;
|
|
33147
33175
|
}
|
|
33148
33176
|
return 0 /* CommandResult.Success */;
|
|
@@ -33192,9 +33220,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
33192
33220
|
}
|
|
33193
33221
|
return;
|
|
33194
33222
|
}
|
|
33195
|
-
|
|
33223
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
33196
33224
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
33197
|
-
return
|
|
33225
|
+
return includesAll(elements, visibleHeaders);
|
|
33198
33226
|
}
|
|
33199
33227
|
isRowHiddenByUser(sheetId, index) {
|
|
33200
33228
|
return this.hiddenHeaders[sheetId].ROW[index];
|
|
@@ -34299,6 +34327,7 @@ class SheetPlugin extends CorePlugin {
|
|
|
34299
34327
|
"checkZonesExistInSheet",
|
|
34300
34328
|
"getCommandZones",
|
|
34301
34329
|
"getUnboundedZone",
|
|
34330
|
+
"checkElementsIncludeAllNonFrozenHeaders",
|
|
34302
34331
|
];
|
|
34303
34332
|
sheetIdsMapName = {};
|
|
34304
34333
|
orderedSheetIds = [];
|
|
@@ -34355,6 +34384,9 @@ class SheetPlugin extends CorePlugin {
|
|
|
34355
34384
|
if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
|
|
34356
34385
|
return 87 /* CommandResult.InvalidHeaderIndex */;
|
|
34357
34386
|
}
|
|
34387
|
+
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
34388
|
+
return 8 /* CommandResult.NotEnoughElements */;
|
|
34389
|
+
}
|
|
34358
34390
|
else {
|
|
34359
34391
|
return 0 /* CommandResult.Success */;
|
|
34360
34392
|
}
|
|
@@ -34647,6 +34679,20 @@ class SheetPlugin extends CorePlugin {
|
|
|
34647
34679
|
}
|
|
34648
34680
|
this.history.update("sheets", sheetId, "panes", panes);
|
|
34649
34681
|
}
|
|
34682
|
+
/**
|
|
34683
|
+
* Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
|
|
34684
|
+
* This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
|
|
34685
|
+
*/
|
|
34686
|
+
checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
|
|
34687
|
+
const paneDivisions = this.getters.getPaneDivisions(sheetId);
|
|
34688
|
+
const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
|
|
34689
|
+
const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
|
|
34690
|
+
if (!startIndex) {
|
|
34691
|
+
return false;
|
|
34692
|
+
}
|
|
34693
|
+
const indicesToCheck = range(startIndex, endIndex);
|
|
34694
|
+
return includesAll(elements, indicesToCheck);
|
|
34695
|
+
}
|
|
34650
34696
|
// ---------------------------------------------------------------------------
|
|
34651
34697
|
// Row/Col manipulation
|
|
34652
34698
|
// ---------------------------------------------------------------------------
|
|
@@ -43933,6 +43979,9 @@ class InternalViewport {
|
|
|
43933
43979
|
const sheetId = this.sheetId;
|
|
43934
43980
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
43935
43981
|
this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
|
|
43982
|
+
if (this.left === -1) {
|
|
43983
|
+
this.left = this.boundaries.left;
|
|
43984
|
+
}
|
|
43936
43985
|
if (this.right === -1) {
|
|
43937
43986
|
this.right = this.getters.getNumberCols(sheetId) - 1;
|
|
43938
43987
|
}
|
|
@@ -43946,6 +43995,9 @@ class InternalViewport {
|
|
|
43946
43995
|
const sheetId = this.sheetId;
|
|
43947
43996
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
43948
43997
|
this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
|
|
43998
|
+
if (this.top === -1) {
|
|
43999
|
+
this.top = this.boundaries.top;
|
|
44000
|
+
}
|
|
43949
44001
|
if (this.bottom === -1) {
|
|
43950
44002
|
this.bottom = this.getters.getNumberRows(sheetId) - 1;
|
|
43951
44003
|
}
|
|
@@ -50514,6 +50566,6 @@ const constants = {
|
|
|
50514
50566
|
export { AbstractChart, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, compile, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, tokenize };
|
|
50515
50567
|
|
|
50516
50568
|
|
|
50517
|
-
__info__.version = '16.4.
|
|
50518
|
-
__info__.date = '2023-
|
|
50519
|
-
__info__.hash = '
|
|
50569
|
+
__info__.version = '16.4.6';
|
|
50570
|
+
__info__.date = '2023-09-12T11:43:54.243Z';
|
|
50571
|
+
__info__.hash = '5746355';
|