Skip to content

Commit a09dfc8

Browse files
committed
[FIX] range: add result changeType
closes #7751 Task: 5095364 Signed-off-by: Pierre Rousseau (pro) <[email protected]>
1 parent 6533266 commit a09dfc8

File tree

7 files changed

+51
-23
lines changed

7 files changed

+51
-23
lines changed

src/collaborative/ot/srt_specific.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ function addConditionalFormatCommandAdaptRange(
6666
cmd.cf.rule = {
6767
...rule,
6868
rangeValues: rule.rangeValues
69-
? adaptStringRange(cmd.sheetId, rule.rangeValues, applyChange)
69+
? adaptStringRange(cmd.sheetId, rule.rangeValues, applyChange).range
7070
: undefined,
7171
};
7272
}

src/helpers/figures/charts/chart_common.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -306,18 +306,26 @@ export function transformChartDefinitionWithDataSetsWithZone<T extends ChartWith
306306
): T {
307307
let labelRange: string | undefined;
308308
if (definition.labelRange) {
309-
const adaptedRange = adaptStringRange(chartSheetId, definition.labelRange, applyChange);
310-
if (adaptedRange !== CellErrorType.InvalidReference) {
309+
const { changeType, range: adaptedRange } = adaptStringRange(
310+
chartSheetId,
311+
definition.labelRange,
312+
applyChange
313+
);
314+
if (changeType !== "REMOVE") {
311315
labelRange = adaptedRange;
312316
}
313317
}
314318

315319
const dataSets: CustomizedDataSet[] = [];
316320
for (const dataSet of definition.dataSets) {
317321
const newDataSet = { ...dataSet };
318-
const adaptedRange = adaptStringRange(chartSheetId, dataSet.dataRange, applyChange);
322+
const { changeType, range: adaptedRange } = adaptStringRange(
323+
chartSheetId,
324+
dataSet.dataRange,
325+
applyChange
326+
);
319327

320-
if (adaptedRange !== CellErrorType.InvalidReference) {
328+
if (changeType !== "REMOVE") {
321329
newDataSet.dataRange = adaptedRange;
322330
dataSets.push(newDataSet);
323331
}

src/helpers/figures/charts/gauge_chart.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,12 @@ export class GaugeChart extends AbstractChart {
163163
): GaugeChartDefinition {
164164
let dataRange: string | undefined;
165165
if (definition.dataRange) {
166-
const adaptedRange = adaptStringRange(chartSheetId, definition.dataRange, applyChange);
167-
if (adaptedRange !== CellErrorType.InvalidReference) {
166+
const { changeType, range: adaptedRange } = adaptStringRange(
167+
chartSheetId,
168+
definition.dataRange,
169+
applyChange
170+
);
171+
if (changeType !== "REMOVE") {
168172
dataRange = adaptedRange;
169173
}
170174
}

src/helpers/figures/charts/scorecard_chart.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import {
2626
ScorecardChartDefinition,
2727
ScorecardChartRuntime,
2828
} from "../../../types/chart/scorecard_chart";
29-
import { CellErrorType } from "../../../types/errors";
3029
import { Validator } from "../../../types/validator";
3130
import { formatValue, humanizeNumber } from "../../format/format";
3231
import { adaptStringRange } from "../../formulas";
@@ -211,14 +210,22 @@ export class ScorecardChart extends AbstractChart {
211210
let baseline: string | undefined;
212211
let keyValue: string | undefined;
213212
if (definition.baseline) {
214-
const adaptedRange = adaptStringRange(chartSheetId, definition.baseline, applyChange);
215-
if (adaptedRange !== CellErrorType.InvalidReference) {
213+
const { changeType, range: adaptedRange } = adaptStringRange(
214+
chartSheetId,
215+
definition.baseline,
216+
applyChange
217+
);
218+
if (changeType !== "REMOVE") {
216219
baseline = adaptedRange;
217220
}
218221
}
219222
if (definition.keyValue) {
220-
const adaptedRange = adaptStringRange(chartSheetId, definition.keyValue, applyChange);
221-
if (adaptedRange !== CellErrorType.InvalidReference) {
223+
const { changeType, range: adaptedRange } = adaptStringRange(
224+
chartSheetId,
225+
definition.keyValue,
226+
applyChange
227+
);
228+
if (changeType !== "REMOVE") {
222229
keyValue = adaptedRange;
223230
}
224231
}

src/helpers/formulas.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { rangeTokenize } from "../formulas";
22
import { Range, RangeAdapter, UID } from "../types";
3+
import { CellErrorType } from "../types/errors";
4+
import { ApplyRangeChangeResult } from "../types/misc";
35
import { concat } from "./misc";
46
import { createInvalidRange, createRangeFromXc, getRangeString } from "./range";
57
import { rangeReference, splitReference } from "./references";
@@ -19,7 +21,7 @@ export function adaptFormulaStringRanges(
1921
continue;
2022
}
2123
const sheetXC = tokens[tokenIdx].value;
22-
const newSheetXC = adaptStringRange(defaultSheetId, sheetXC, applyChange);
24+
const newSheetXC = adaptStringRange(defaultSheetId, sheetXC, applyChange).range;
2325

2426
if (sheetXC !== newSheetXC) {
2527
tokens[tokenIdx] = {
@@ -35,28 +37,34 @@ export function adaptStringRange(
3537
defaultSheetId: UID,
3638
sheetXC: string,
3739
rangeAdapter: RangeAdapter
38-
): string {
40+
): ApplyRangeChangeResult<string> {
3941
const sheetName = splitReference(sheetXC).sheetName;
4042
if (
4143
sheetName
4244
? !isSheetNameEqual(sheetName, rangeAdapter.sheetName.old)
4345
: defaultSheetId !== rangeAdapter.sheetId
4446
) {
45-
return sheetXC;
47+
return { changeType: "NONE", range: sheetXC };
4648
}
4749
const sheetId = sheetName ? rangeAdapter.sheetId : defaultSheetId;
4850

4951
const range = getRange(sheetXC, sheetId);
5052
if (range.invalidXc) {
51-
return sheetXC;
53+
return { changeType: "NONE", range: sheetXC };
5254
}
5355

5456
const change = rangeAdapter.applyChange(range);
5557
if (change.changeType === "NONE" || change.changeType === "REMOVE") {
56-
return sheetXC;
58+
return { changeType: change.changeType, range: sheetXC };
5759
}
58-
59-
return getRangeString(change.range, defaultSheetId, getSheetNameGetter(rangeAdapter));
60+
const rangeStr = getRangeString(change.range, defaultSheetId, getSheetNameGetter(rangeAdapter));
61+
if (rangeStr === CellErrorType.InvalidReference) {
62+
return { changeType: "REMOVE", range: rangeStr };
63+
}
64+
return {
65+
changeType: change.changeType,
66+
range: rangeStr,
67+
};
6068
}
6169

6270
function getSheetNameGetter(applyChange: RangeAdapter) {

src/plugins/core/range.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ export class RangeAdapterPlugin implements CommandHandler<CoreCommand> {
9292
*/
9393
private verifyRangeRemoved(adaptRange: ApplyRangeChange): ApplyRangeChange {
9494
return (range: Range) => {
95-
const result: ApplyRangeChangeResult = adaptRange(range);
95+
const result: ApplyRangeChangeResult<Range> = adaptRange(range);
9696
if (result.changeType !== "NONE" && !isZoneValid(result.range.zone)) {
9797
return { range: result.range, changeType: "REMOVE" };
9898
}

src/types/misc.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,9 @@ export const enum DIRECTION {
289289
}
290290

291291
export type ChangeType = "REMOVE" | "RESIZE" | "MOVE" | "CHANGE" | "NONE";
292-
export type ApplyRangeChangeResult = { changeType: ChangeType; range: Range };
293-
export type ApplyRangeChange = (range: Range) => ApplyRangeChangeResult;
292+
export type ApplyRangeChangeResult<T> = { changeType: ChangeType; range: T };
293+
export type ApplyFormulaRangeChangeResult = { changeType: ChangeType; formula: string };
294+
export type ApplyRangeChange = (range: Range) => ApplyRangeChangeResult<Range>;
294295

295296
export type AdaptSheetName = { old: string; current: string };
296297

@@ -302,7 +303,7 @@ export type RangeAdapter = {
302303

303304
export type RangeAdapterFunctions = {
304305
applyChange: ApplyRangeChange;
305-
adaptRangeString: (defaultSheetId: UID, sheetXC: string) => string;
306+
adaptRangeString: (defaultSheetId: UID, sheetXC: string) => ApplyRangeChangeResult<string>;
306307
adaptFormulaString: (defaultSheetId: UID, formula: string) => string;
307308
};
308309

0 commit comments

Comments
 (0)