Skip to content

Commit f497179

Browse files
LucasLefevrerrahir
authored andcommitted
[FIX] range: add result changeType
closes #7826 Task: 5095364 Signed-off-by: Pierre Rousseau (pro) <pro@odoo.com> Signed-off-by: Rémi Rahir (rar) <rar@odoo.com>
1 parent b41863f commit f497179

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
@@ -329,18 +329,26 @@ export function transformChartDefinitionWithDataSetsWithZone<T extends ChartWith
329329
): T {
330330
let labelRange: string | undefined;
331331
if (definition.labelRange) {
332-
const adaptedRange = adaptStringRange(chartSheetId, definition.labelRange, applyChange);
333-
if (adaptedRange !== CellErrorType.InvalidReference) {
332+
const { changeType, range: adaptedRange } = adaptStringRange(
333+
chartSheetId,
334+
definition.labelRange,
335+
applyChange
336+
);
337+
if (changeType !== "REMOVE") {
334338
labelRange = adaptedRange;
335339
}
336340
}
337341

338342
const dataSets: CustomizedDataSet[] = [];
339343
for (const dataSet of definition.dataSets) {
340344
const newDataSet = { ...dataSet };
341-
const adaptedRange = adaptStringRange(chartSheetId, dataSet.dataRange, applyChange);
345+
const { changeType, range: adaptedRange } = adaptStringRange(
346+
chartSheetId,
347+
dataSet.dataRange,
348+
applyChange
349+
);
342350

343-
if (adaptedRange !== CellErrorType.InvalidReference) {
351+
if (changeType !== "REMOVE") {
344352
newDataSet.dataRange = adaptedRange;
345353
dataSets.push(newDataSet);
346354
}

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";
@@ -213,14 +212,22 @@ export class ScorecardChart extends AbstractChart {
213212
let baseline: string | undefined;
214213
let keyValue: string | undefined;
215214
if (definition.baseline) {
216-
const adaptedRange = adaptStringRange(chartSheetId, definition.baseline, applyChange);
217-
if (adaptedRange !== CellErrorType.InvalidReference) {
215+
const { changeType, range: adaptedRange } = adaptStringRange(
216+
chartSheetId,
217+
definition.baseline,
218+
applyChange
219+
);
220+
if (changeType !== "REMOVE") {
218221
baseline = adaptedRange;
219222
}
220223
}
221224
if (definition.keyValue) {
222-
const adaptedRange = adaptStringRange(chartSheetId, definition.keyValue, applyChange);
223-
if (adaptedRange !== CellErrorType.InvalidReference) {
225+
const { changeType, range: adaptedRange } = adaptStringRange(
226+
chartSheetId,
227+
definition.keyValue,
228+
applyChange
229+
);
230+
if (changeType !== "REMOVE") {
224231
keyValue = adaptedRange;
225232
}
226233
}

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
@@ -288,8 +288,9 @@ export const enum DIRECTION {
288288
}
289289

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

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

@@ -301,7 +302,7 @@ export type RangeAdapter = {
301302

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

0 commit comments

Comments
 (0)