Skip to content

Commit 4bf3363

Browse files
committed
[FIX] data_validation: selecting range from another sheet
Steps to reproduce: - Create a new sheet (Sheet2). - On Sheet1, open the Data Validation side panel. - Add a DV with type "isValueInRange". - Click on the selection input to select the range. - Navigate to Sheet2 and select the range. - Click on Save without confirming the ranges. Before this commit: - The DV was created on Sheet2 instead of remaining on Sheet1. After this commit: - The DV is correctly created on the original sheet (Sheet1). closes #7319 Task: 4948201 X-original-commit: 5395a3b Signed-off-by: Lucas Lefèvre (lul) <lul@odoo.com> Signed-off-by: Dhrutik Patel (dhrp) <dhrp@odoo.com>
1 parent af36b26 commit 4bf3363

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

src/components/side_panel/data_validation/dv_editor/dv_editor.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
DataValidationRule,
1111
DataValidationRuleData,
1212
SpreadsheetChildEnv,
13+
UID,
1314
} from "../../../../types";
1415
import { SelectionInput } from "../../../selection_input/selection_input";
1516
import { Section } from "../../components/section/section";
@@ -39,14 +40,15 @@ export class DataValidationEditor extends Component<Props, SpreadsheetChildEnv>
3940
};
4041

4142
state = useState<State>({ rule: this.defaultDataValidationRule });
43+
private editingSheetId!: UID;
4244

4345
setup() {
46+
this.editingSheetId = this.env.model.getters.getActiveSheetId();
4447
if (this.props.rule) {
45-
const sheetId = this.env.model.getters.getActiveSheetId();
4648
this.state.rule = {
4749
...this.props.rule,
4850
ranges: this.props.rule.ranges.map((range) =>
49-
this.env.model.getters.getRangeString(range, sheetId)
51+
this.env.model.getters.getRangeString(range, this.editingSheetId)
5052
),
5153
};
5254
this.state.rule.criterion.type = this.props.rule.criterion.type;
@@ -90,17 +92,16 @@ export class DataValidationEditor extends Component<Props, SpreadsheetChildEnv>
9092
const criterion = rule.criterion;
9193
const criterionEvaluator = dataValidationEvaluatorRegistry.get(criterion.type);
9294

93-
const sheetId = this.env.model.getters.getActiveSheetId();
9495
const values = criterion.values
9596
.slice(0, criterionEvaluator.numberOfValues(criterion))
9697
.map((value) => value?.trim())
9798
.filter((value) => value !== "" && value !== undefined)
9899
.map((value) => canonicalizeContent(value, locale));
99100
rule.criterion = { ...criterion, values };
100101
return {
101-
sheetId,
102+
sheetId: this.editingSheetId,
102103
ranges: this.state.rule.ranges.map((xc) =>
103-
this.env.model.getters.getRangeDataFromXc(sheetId, xc)
104+
this.env.model.getters.getRangeDataFromXc(this.editingSheetId, xc)
104105
),
105106
rule,
106107
};

tests/data_validation/data_validation_generics_side_panel_component.test.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { Model } from "../../src";
22
import { DataValidationPanel } from "../../src/components/side_panel/data_validation/data_validation_panel";
33
import { UID } from "../../src/types";
4-
import { addDataValidation, updateLocale } from "../test_helpers/commands_helpers";
4+
import {
5+
activateSheet,
6+
addDataValidation,
7+
createSheet,
8+
updateLocale,
9+
} from "../test_helpers/commands_helpers";
510
import { FR_LOCALE } from "../test_helpers/constants";
611
import { click, setInputValueAndTrigger, simulateClick } from "../test_helpers/dom_helper";
712
import {
@@ -190,6 +195,29 @@ describe("data validation sidePanel component", () => {
190195
expect(getDataValidationRules(model, sheetId)).toMatchObject([{ id: "id1" }, { id: "id2" }]);
191196
});
192197

198+
test("DV stays on original sheet when range is selected from another sheet and saved", async () => {
199+
createSheet(model, { sheetId: "sh2" });
200+
201+
await simulateClick(".o-dv-add");
202+
await nextTick();
203+
setInputValueAndTrigger(".o-selection-input input", "A1:A5");
204+
await changeCriterionType("isValueInRange");
205+
206+
const rangeInput = fixture.querySelectorAll<HTMLInputElement>(".o-selection-input input")[1];
207+
activateSheet(model, "sh2");
208+
await setInputValueAndTrigger(rangeInput, "A1:A5");
209+
await simulateClick(".o-dv-save");
210+
211+
expect(getDataValidationRules(model, sheetId)).toEqual([
212+
{
213+
id: expect.any(String),
214+
criterion: { type: "isValueInRange", displayStyle: "arrow", values: ["A1:A5"] },
215+
ranges: ["A1:A5"],
216+
},
217+
]);
218+
expect(getDataValidationRules(model, "sh2")).toHaveLength(0);
219+
});
220+
193221
describe("Locale", () => {
194222
test("Number preview is localized", async () => {
195223
updateLocale(model, FR_LOCALE);

0 commit comments

Comments
 (0)