Skip to content

Commit f502f0a

Browse files
[IMP] composer: prettify formula when content is too long.
Prettify formula depending on the content width. closes #6435 Task: 4735172 Signed-off-by: Lucas Lefèvre (lul) <[email protected]> Co-authored-by: lul-odoo <[email protected]>
1 parent 5800d1b commit f502f0a

File tree

15 files changed

+524
-92
lines changed

15 files changed

+524
-92
lines changed

src/components/composer/composer/abstract_composer_store.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -539,11 +539,14 @@ export abstract class AbstractComposerStore extends SpreadsheetStore {
539539
if (isNewCurrentContent || this.editionMode !== "inactive") {
540540
const locale = this.getters.getLocale();
541541
this.currentTokens = isFormula(text) ? composerTokenize(text, locale) : [];
542-
if (this.currentTokens.length > 100) {
542+
const nonSpaceTokensCount = this.currentTokens.filter(
543+
(token) => token.type !== "SPACE"
544+
).length;
545+
if (nonSpaceTokensCount > 1000) {
543546
if (raise) {
544547
this.notificationStore.raiseError(
545548
_t(
546-
"This formula has over 100 parts. It can't be processed properly, consider splitting it into multiple cells"
549+
"This formula has over 1000 parts. It can't be processed properly, consider splitting it into multiple cells"
547550
)
548551
);
549552
}

src/components/composer/composer/cell_composer_store.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { prettify } from "../../../formulas/formula_formatter";
2+
import { parseTokens } from "../../../formulas/parser";
13
import { isMultipleElementMatrix, toScalar } from "../../../functions/helper_matrices";
24
import { parseLiteral } from "../../../helpers/cells";
35
import {
@@ -202,7 +204,10 @@ export class CellComposerStore extends AbstractComposerStore {
202204
const locale = this.getters.getLocale();
203205
const cell = this.getters.getCell(position);
204206
if (cell?.isFormula) {
205-
return localizeFormula(cell.content, locale);
207+
const prettifiedContent = cell.compiledFormula.isBadExpression
208+
? cell.content
209+
: prettify(parseTokens(cell.compiledFormula.tokens), 80);
210+
return localizeFormula(prettifiedContent, locale);
206211
}
207212
const spreader = this.model.getters.getArrayFormulaSpreadingOn(position);
208213
if (spreader) {

src/components/composer/composer/composer.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ css/* scss */ `
6161
padding-right: 3px;
6262
outline: none;
6363
64+
tab-size: 4;
65+
6466
p {
6567
margin-bottom: 0px;
6668

src/components/composer/top_bar_composer/top_bar_composer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { CellComposerStore } from "../composer/cell_composer_store";
1414
import { Composer } from "../composer/composer";
1515
import { ComposerFocusStore, ComposerInterface } from "../composer_focus_store";
1616

17-
const COMPOSER_MAX_HEIGHT = 100;
17+
const COMPOSER_MAX_HEIGHT = 300;
1818

1919
/* svg free of use from https://uxwing.com/formula-fx-icon/ */
2020
const FX_SVG = /*xml*/ `

0 commit comments

Comments
 (0)