Skip to content

Commit 66e9544

Browse files
committed
update calculation results views
1 parent 0f7455f commit 66e9544

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

src/pages/Home/CalculationResults.tsx

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@ export const CalculationResults = ({ selected, value }: Props) => {
2424
const [isLowConfVisible, setIsLowConfVisible] = useState(false);
2525

2626
const results = useMemo(() => {
27-
const values: ConversionResults = { conversions: [], highestConfidence: 0 };
27+
const values: ConversionResults = { all: [], highConfidence: [], highestConfidence: 0 };
2828
if (!selected || !currencyMap) {
2929
return values;
3030
}
3131

32+
const filteredCurrencies = currencies.filter((c) => c !== selected && c !== "Mirror of Kalandra");
33+
3234
try {
33-
for (const currency of currencies.filter((c) => c !== selected && c !== "Mirror of Kalandra")) {
35+
for (const currency of filteredCurrencies) {
3436
const conversion = convert(selected, currency, currencyMap);
3537

3638
if (conversion.rate == null) {
@@ -41,28 +43,29 @@ export const CalculationResults = ({ selected, value }: Props) => {
4143
values.highestConfidence = conversion.confidence;
4244
}
4345

44-
values.conversions.push({
46+
const result = {
4547
currency,
4648
calculation: value ? parseFloat(value) * conversion.rate : 0,
4749
confidence: conversion.confidence ?? 0
48-
});
50+
};
51+
values.all.push(result);
52+
53+
if (result.confidence > 50) {
54+
values.highConfidence.push(result);
55+
}
4956
}
5057
} catch (e) {
5158
console.error(e);
5259
}
5360

54-
if (!isLowConfVisible) {
55-
values.conversions = values.conversions.filter((c) => c.confidence > 50);
56-
}
57-
5861
return values;
59-
}, [selected, value, isLowConfVisible, currencyMap]);
62+
}, [selected, value, currencyMap]);
6063

6164
return (
6265
<div className='flex flex-col gap-2'>
6366
{selected && (
6467
<div className='flex flex-col w-max self-start'>
65-
{results.conversions.length === 0 ? (
68+
{results.all.length === 0 ? (
6669
<Alert variant='destructive' className='max-w-[400px]'>
6770
<AlertCircle className='h-4 w-4' />
6871
<AlertTitle>No Data</AlertTitle>
@@ -84,7 +87,21 @@ export const CalculationResults = ({ selected, value }: Props) => {
8487
</label>
8588
</div>
8689

87-
{results.conversions.map((res) => (
90+
{/* TODO: refactor. maybe a separate component */}
91+
{isLowConfVisible === false && results["highConfidence"].length === 0 && (
92+
<Alert variant='destructive' className='max-w-[400px]'>
93+
<AlertCircle className='h-4 w-4' />
94+
<AlertTitle>No High Confidence</AlertTitle>
95+
<AlertDescription>
96+
Out of the <span className='font-[FontinBold]'>{results.all.length}</span> exchange results, none of
97+
them have higher than <span className='font-[FontinBold]'>50%</span> confidence rating. If you still
98+
want to view those exchange rates, you can check the{" "}
99+
<span className='underline'>Show low confidence</span> option above.
100+
</AlertDescription>
101+
</Alert>
102+
)}
103+
104+
{results[isLowConfVisible ? "all" : "highConfidence"].map((res) => (
88105
<div key={res.currency} className='mt-[-4px] flex gap-2 w-full items-center relative'>
89106
<PinButton primary={selected} secondary={res.currency} />
90107

src/pages/Home/types.d.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
type Conversions = Array<{ currency: CurrencyKey; calculation: number; confidence: number }>;
12
type ConversionResults = {
2-
conversions: Array<{ currency: CurrencyKey; calculation: number; confidence: number }>;
3+
all: Conversions;
4+
highConfidence: Conversions;
35
highestConfidence: number;
46
};

0 commit comments

Comments
 (0)