Commit 8aca9e7e authored by isstuev's avatar isstuev

check template summary

parent 504de39d
...@@ -17,7 +17,7 @@ import EnsEntity from 'ui/shared/entities/ens/EnsEntity'; ...@@ -17,7 +17,7 @@ import EnsEntity from 'ui/shared/entities/ens/EnsEntity';
import TokenEntity from 'ui/shared/entities/token/TokenEntity'; import TokenEntity from 'ui/shared/entities/token/TokenEntity';
import IconSvg from 'ui/shared/IconSvg'; import IconSvg from 'ui/shared/IconSvg';
import { extractVariables, getStringChunks, fillStringVariables, NATIVE_COIN_SYMBOL_VAR_NAME } from './utils'; import { extractVariables, getStringChunks, fillStringVariables, checkSummary, NATIVE_COIN_SYMBOL_VAR_NAME } from './utils';
type Props = { type Props = {
summary?: TxInterpretationSummary; summary?: TxInterpretationSummary;
...@@ -116,6 +116,10 @@ const TxInterpretation = ({ summary, isLoading, className }: Props) => { ...@@ -116,6 +116,10 @@ const TxInterpretation = ({ summary, isLoading, className }: Props) => {
const template = summary.summary_template; const template = summary.summary_template;
const variables = summary.summary_template_variables; const variables = summary.summary_template_variables;
if (!checkSummary(template, variables)) {
return null;
}
const intermediateResult = fillStringVariables(template, variables); const intermediateResult = fillStringVariables(template, variables);
const variablesNames = extractVariables(intermediateResult); const variablesNames = extractVariables(intermediateResult);
......
import { extractVariables, getStringChunks } from './utils'; import { extractVariables, getStringChunks, checkSummary } from './utils';
const template = '{action_type} {source_amount} {native} into {destination_amount} {destination_token}'; const template = '{action_type} {source_amount} {native} into {destination_amount} {destination_token}';
...@@ -11,3 +11,15 @@ it('split string without capturing variables', () => { ...@@ -11,3 +11,15 @@ it('split string without capturing variables', () => {
const result = getStringChunks(template); const result = getStringChunks(template);
expect(result).toEqual([ '', ' ', ' ', ' into ', ' ', '' ]); expect(result).toEqual([ '', ' ', ' ', ' into ', ' ', '' ]);
}); });
it('checks that summary is valid', () => {
const result = checkSummary('{foo} {bar}', { foo: { type: 'string', value: 'foo' }, bar: { type: 'string', value: 'bar' } });
expect(result).toBe(true);
});
it('checks that summary is invalid', () => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore:
const result = checkSummary('{foo} {bar}', { foo: { type: 'string', value: null }, bar: { type: 'string', value: 'bar' } });
expect(result).toBe(false);
});
...@@ -20,6 +20,19 @@ export function getStringChunks(template: string) { ...@@ -20,6 +20,19 @@ export function getStringChunks(template: string) {
return template.split(VAR_REGEXP); return template.split(VAR_REGEXP);
} }
export function checkSummary(template: string, variables: Record<string, TxInterpretationVariable>) {
const variablesNames = extractVariables(template);
let result = true;
for (const name of variablesNames) {
if (!variables[name] || variables[name].value === undefined || variables[name].value === null) {
result = false;
break;
}
}
return result;
}
export function fillStringVariables(template: string, variables: Record<string, TxInterpretationVariable>) { export function fillStringVariables(template: string, variables: Record<string, TxInterpretationVariable>) {
const variablesNames = extractVariables(template); const variablesNames = extractVariables(template);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment