Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions src/components/spreadsheet-view/columns/utils/column-mapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) =>
Expand All @@ -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;
}
Expand Down
1 change: 1 addition & 0 deletions src/translations/spreadsheet-en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,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',
Expand Down
1 change: 1 addition & 0 deletions src/translations/spreadsheet-fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,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',
Expand Down
Loading