Skip to content
Open
Prev Previous commit
Next Next commit
[IMP] standalone_composer: avoid sheet activation on blur
Task: 4072640
  • Loading branch information
fdamhaut committed May 12, 2026
commit 41d70f1c303dc47ee3c8924ccd27f6b9b41f7460
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { setXcToFixedReferenceType } from "../../../helpers/references";
import { AutoCompleteProviderDefinition } from "../../../registries/auto_completes/auto_complete_registry";
import { Color, UID, UnboundedZone, Zone } from "../../../types/misc";
import { Get } from "../../../types/store_engine";
import { adaptFormulaToSheet } from "../../helpers/formula";
import { AbstractComposerStore } from "../composer/abstract_composer_store";

export interface StandaloneComposerArgs {
Expand Down Expand Up @@ -65,10 +66,16 @@ export class StandaloneComposerStore extends AbstractComposerStore {
}

stopEdition() {
this._stopEdition();
this._stopEdition({ activateSheet: false });
}

protected confirmEdition(content: string) {
content = adaptFormulaToSheet(
this.getters,
content,
this.getters.getActiveSheetId(),
this.sheetId
);
this.args().onConfirm(content);
}

Expand Down
22 changes: 22 additions & 0 deletions src/components/helpers/formula.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Getters, UID } from "../..";
import { rangeTokenize } from "../../formulas/range_tokenizer";

export function adaptFormulaToSheet(
getters: Getters,
formula: string,
toSheetId: UID,
fromSheetId?: UID
) {
return rangeTokenize(formula)
.map((token) => {
if (token.type === "REFERENCE") {
const range = getters.getRangeFromSheetXC(
fromSheetId ?? getters.getActiveSheetId(),
token.value
);
return getters.getRangeString(range, toSheetId);
}
return token.value;
})
.join("");
}
Original file line number Diff line number Diff line change
Expand Up @@ -236,12 +236,6 @@ describe("Spreadsheet pivot side panel", () => {
"=A1+Sheet2!A1"
);
await keyDown({ key: "Enter" });

activateSheet(model, sheet2Id);
// close the side panel and reopen it while the second sheet is active
await click(fixture.querySelector(".o-sidePanelClose")!);
env.openSidePanel("PivotSidePanel", { pivotId: "3" });
await nextTick();
expect(fixture.querySelector(".pivot-dimension .o-composer")?.textContent).toEqual(
"=Sheet1!A1+Sheet2!A1"
);
Expand All @@ -252,7 +246,7 @@ describe("Spreadsheet pivot side panel", () => {
env.openSidePanel("PivotSidePanel", { pivotId: "3" });
await nextTick();
expect(fixture.querySelector(".pivot-dimension .o-composer")?.textContent).toEqual(
"=A1+Sheet2!A1"
"=Sheet1!A1+Sheet2!A1"
);
});

Expand Down