@@ -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
0 commit comments