Skip to content

Commit 34d8a57

Browse files
authored
Merge pull request #1585 from blockscout/check-summary
check template summary
2 parents fec9e20 + 8aca9e7 commit 34d8a57

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

ui/tx/interpretation/TxInterpretation.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import EnsEntity from 'ui/shared/entities/ens/EnsEntity';
1717
import TokenEntity from 'ui/shared/entities/token/TokenEntity';
1818
import IconSvg from 'ui/shared/IconSvg';
1919

20-
import { extractVariables, getStringChunks, fillStringVariables, NATIVE_COIN_SYMBOL_VAR_NAME } from './utils';
20+
import { extractVariables, getStringChunks, fillStringVariables, checkSummary, NATIVE_COIN_SYMBOL_VAR_NAME } from './utils';
2121

2222
type Props = {
2323
summary?: TxInterpretationSummary;
@@ -116,6 +116,10 @@ const TxInterpretation = ({ summary, isLoading, className }: Props) => {
116116
const template = summary.summary_template;
117117
const variables = summary.summary_template_variables;
118118

119+
if (!checkSummary(template, variables)) {
120+
return null;
121+
}
122+
119123
const intermediateResult = fillStringVariables(template, variables);
120124

121125
const variablesNames = extractVariables(intermediateResult);

ui/tx/interpretation/utils.test.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { extractVariables, getStringChunks } from './utils';
1+
import { extractVariables, getStringChunks, checkSummary } from './utils';
22

33
const template = '{action_type} {source_amount} {native} into {destination_amount} {destination_token}';
44

@@ -11,3 +11,15 @@ it('split string without capturing variables', () => {
1111
const result = getStringChunks(template);
1212
expect(result).toEqual([ '', ' ', ' ', ' into ', ' ', '' ]);
1313
});
14+
15+
it('checks that summary is valid', () => {
16+
const result = checkSummary('{foo} {bar}', { foo: { type: 'string', value: 'foo' }, bar: { type: 'string', value: 'bar' } });
17+
expect(result).toBe(true);
18+
});
19+
20+
it('checks that summary is invalid', () => {
21+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
22+
// @ts-ignore:
23+
const result = checkSummary('{foo} {bar}', { foo: { type: 'string', value: null }, bar: { type: 'string', value: 'bar' } });
24+
expect(result).toBe(false);
25+
});

ui/tx/interpretation/utils.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,19 @@ export function getStringChunks(template: string) {
2020
return template.split(VAR_REGEXP);
2121
}
2222

23+
export function checkSummary(template: string, variables: Record<string, TxInterpretationVariable>) {
24+
const variablesNames = extractVariables(template);
25+
let result = true;
26+
for (const name of variablesNames) {
27+
if (!variables[name] || variables[name].value === undefined || variables[name].value === null) {
28+
result = false;
29+
break;
30+
}
31+
}
32+
33+
return result;
34+
}
35+
2336
export function fillStringVariables(template: string, variables: Record<string, TxInterpretationVariable>) {
2437
const variablesNames = extractVariables(template);
2538

0 commit comments

Comments
 (0)