diff --git a/src/components/spreadsheet-view/columns/utils/column-mapper.ts b/src/components/spreadsheet-view/columns/utils/column-mapper.ts index 7e1da76d73..edc8681cbf 100644 --- a/src/components/spreadsheet-view/columns/utils/column-mapper.ts +++ b/src/components/spreadsheet-view/columns/utils/column-mapper.ts @@ -22,6 +22,17 @@ import { } from '../../../custom-aggrid/custom-aggrid-filters/custom-aggrid-filter.type'; import { isCalculationRow } from '../../utils/calculation-utils'; import { ErrorCellRenderer } from '../../../custom-aggrid/cell-renderers'; +import { isAccessorNode, isSymbolNode, parse } from 'mathjs'; + +function isSingleSymbol(formula: string) { + try { + const node = parse(formula); + return isSymbolNode(node) || isAccessorNode(node); + } catch (error) { + console.warn(`Error while parsing formula ${error}`); + return false; + } +} const createValueGetter = (colDef: ColumnDefinition) => @@ -38,10 +49,16 @@ const createValueGetter = }); const escapedFormula = colDef.formula.replace(/\\/g, '\\\\'); const result = limitedEvaluate(escapedFormula, scope); - return validateFormulaResult(result, colDef.type); + return result ? validateFormulaResult(result, colDef.type) : undefined; } catch (e) { - if (e instanceof MathJsValidationError) { - return { error: e.error }; + if (e instanceof Error) { + if (e instanceof MathJsValidationError) { + return { error: e.error }; + } + // If we encounter a single undefined symbol it won't display an error, it's setup this way to prevent interpreting missing data as errors + if (!isSingleSymbol(colDef.formula)) { + return { error: 'spreadsheet/formula/error/generic' }; + } } return undefined; } diff --git a/src/translations/spreadsheet-en.ts b/src/translations/spreadsheet-en.ts index 5492f9f15f..1484bd2205 100644 --- a/src/translations/spreadsheet-en.ts +++ b/src/translations/spreadsheet-en.ts @@ -154,6 +154,7 @@ const spreadsheetEn = { //Formula errors 'spreadsheet/formula/error': '#ERROR', + 'spreadsheet/formula/error/generic': 'Formula returns an error', 'spreadsheet/formula/import/disabled': 'Function import is disabled', 'spreadsheet/formula/createUnit/disabled': 'Function createUnit is disabled', 'spreadsheet/formula/evaluate/disabled': 'Function evaluate is disabled', diff --git a/src/translations/spreadsheet-fr.ts b/src/translations/spreadsheet-fr.ts index 3cad2eee2e..8a6ed6fc98 100644 --- a/src/translations/spreadsheet-fr.ts +++ b/src/translations/spreadsheet-fr.ts @@ -161,6 +161,7 @@ const spreadsheetFr = { //Formula errors 'spreadsheet/formula/error': '#ERREUR', + 'spreadsheet/formula/error/generic': 'La formule renvoie une erreur', 'spreadsheet/formula/import/disabled': 'La fonction import est désactivée', 'spreadsheet/formula/createUnit/disabled': 'La fonction createUnit est désactivée', 'spreadsheet/formula/evaluate/disabled': 'La fonction evaluate est désactivée',