Skip to content

Commit cd4ea5a

Browse files
committed
[FIX] PivotSidePanel: Allow unbounded range in the side panel
The code converting the selectionInput value into a valid dataset for the pivot definition did not account for unbounded zones. closes #4870 Task: 4126669 Signed-off-by: Lucas Lefèvre (lul) <[email protected]>
1 parent 3426a5c commit cd4ea5a

File tree

3 files changed

+26
-10
lines changed

3 files changed

+26
-10
lines changed

src/components/side_panel/pivot/pivot_side_panel/pivot_spreadsheet_side_panel/pivot_spreadsheet_side_panel.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Component, useState } from "@odoo/owl";
2-
import { splitReference, toZone } from "../../../../../helpers";
32
import { SpreadsheetPivotRuntimeDefinition } from "../../../../../helpers/pivot/spreadsheet_pivot/runtime_definition_spreadsheet_pivot";
43
import { SpreadsheetPivot } from "../../../../../helpers/pivot/spreadsheet_pivot/spreadsheet_pivot";
54
import { Store, useLocalStore } from "../../../../../store_engine";
@@ -76,15 +75,15 @@ export class PivotSpreadsheetSidePanel extends Component<Props, SpreadsheetChild
7675

7776
onSelectionConfirmed() {
7877
if (this.state.range) {
79-
const { sheetName, xc } = splitReference(this.state.range);
80-
const sheetId = sheetName
81-
? this.env.model.getters.getSheetIdByName(sheetName)
82-
: this.env.model.getters.getActiveSheetId();
83-
if (!sheetId) {
78+
const range = this.env.model.getters.getRangeFromSheetXC(
79+
this.env.model.getters.getActiveSheetId(),
80+
this.state.range
81+
);
82+
if (range.invalidSheetName || range.invalidXc) {
8483
return;
8584
}
86-
const zone = toZone(xc);
87-
const dataSet = { sheetId, zone };
85+
86+
const dataSet = { sheetId: range.sheetId, zone: range.zone };
8887
this.store.update({ dataSet });
8988
// Immediately apply the update to recompute the pivot fields
9089
this.store.applyUpdate();

tests/pivots/pivot_side_panel.test.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { Model, SpreadsheetChildEnv } from "../../src";
1+
import { Model, SpreadsheetChildEnv, SpreadsheetPivotCoreDefinition } from "../../src";
2+
import { toZone } from "../../src/helpers";
23
import { createSheet, deleteSheet } from "../test_helpers/commands_helpers";
3-
import { click } from "../test_helpers/dom_helper";
4+
import { click, setInputValueAndTrigger, simulateClick } from "../test_helpers/dom_helper";
45
import { mountSpreadsheet, nextTick } from "../test_helpers/helpers";
56
import { SELECTORS, addPivot, removePivot } from "../test_helpers/pivot_helpers";
67

@@ -45,4 +46,18 @@ describe("Pivot side panel", () => {
4546
await nextTick();
4647
expect(fixture.querySelector(".o-sidePanel")).not.toBeNull();
4748
});
49+
50+
test("Side panel supports unbounded zone in definition", async () => {
51+
env.openSidePanel("PivotSidePanel", { pivotId: "1" });
52+
await nextTick();
53+
setInputValueAndTrigger(SELECTORS.ZONE_INPUT, "A:A");
54+
await nextTick();
55+
await simulateClick(SELECTORS.ZONE_CONFIRM);
56+
expect(
57+
(model.getters.getPivotCoreDefinition("1") as SpreadsheetPivotCoreDefinition).dataSet
58+
).toMatchObject({
59+
sheetId: model.getters.getActiveSheetId(),
60+
zone: toZone("A1:A100"),
61+
});
62+
});
4863
});

tests/test_helpers/pivot_helpers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,6 @@ export const SELECTORS = {
6262
DUPLICATE_PIVOT: ".os-cog-wheel-menu .fa-copy",
6363
DELETE_PIVOT: ".os-cog-wheel-menu .fa-trash",
6464
FLIP_AXIS_PIVOT: ".os-cog-wheel-menu .fa-exchange",
65+
ZONE_INPUT: ".o-selection-input input",
66+
ZONE_CONFIRM: ".o-selection-input .o-selection-ok",
6567
};

0 commit comments

Comments
 (0)