diff Simoleon/ConversionView.swift @ 186:1ebd1c5dd302

finish ConversionView
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Thu, 23 Dec 2021 11:30:38 +0100
parents 2fc95efcb1ee
children 13d5a8deb6c2
line wrap: on
line diff
--- a/Simoleon/ConversionView.swift	Wed Dec 22 16:12:23 2021 +0100
+++ b/Simoleon/ConversionView.swift	Thu Dec 23 11:30:38 2021 +0100
@@ -21,7 +21,10 @@
     
     // CurrencyConversion variables
     @State private var showConversion = false
-    @State private var conversion = CurrencyConversionResponse(message: [CurrencyConversionResult]())
+    @State private var latestRate = CurrencyLatestRateResponse(message: [CurrencyLatestRateResult]())
+    
+    // Update currency rates
+    @State private var timer = Timer.publish(every: 3, on: .main, in: .common).autoconnect()
     
     var body: some View {
         ScrollView(showsIndicators: false) {
@@ -48,10 +51,6 @@
                     .fontWeight(.semibold)
                 
                 CurrencyTextfield(currencyCode: baseCurrency.code, amount: $amount)
-                    .onChange(of: amount) { _ in
-                        showConversion = false
-                        getConversion()
-                    }
                 
                 Divider()
                 Text("\(quoteCurrency.code) - \(quoteCurrency.name)")
@@ -59,9 +58,9 @@
                     .fontWeight(.semibold)
                 
                 CurrencyConversion(
-                    conversion: conversion,
+                    latestRate: latestRate,
                     currencyCode: quoteCurrency.code,
-                    showConversion: $showConversion
+                    amount: $amount
                 )
             }
             .padding()
@@ -69,7 +68,16 @@
                 CurrencyList(baseCurrency: $baseCurrency, quoteCurrency: $quoteCurrency, selecting: selecting)
             }
         }
-        .onAppear(perform: getConversion)
+        .onAppear {
+            getConversion()
+            timer = Timer.publish(every: 3, on: .main, in: .common).autoconnect()
+        }
+        .onReceive(timer) { _ in
+            getConversion()
+        }
+        .onDisappear {
+            timer.upstream.connect().cancel()
+        }
         .navigationTitle("Convert")
         .if(UIDevice.current.userInterfaceIdiom == .phone && showNavigationView ?? true) { content in
             NavigationView { content }
@@ -84,17 +92,12 @@
     
     // Request conversion
     private func getConversion() {
-        guard let amount = Float(amount) else {
-            amount = ""
-            showConversion = true
-            return
-        }
-        
         let currencyPair = "\(baseCurrency.code)\(quoteCurrency.code)"
-        let url = "https://api.simoleon.app/fx/convert?symbols=\(currencyPair)&amount=\(amount)"
-        httpRequest(url: url, model: CurrencyConversionResponse.self) { response in
-            conversion = response
-            if conversion.message.isEmpty {
+        let url = "https://api.simoleon.app/fx/latest?symbols=\(currencyPair)"
+        httpRequest(url: url, model: CurrencyLatestRateResponse.self) { response in
+            latestRate = response
+            print(latestRate.message.first!.timestamp)
+            if latestRate.message.isEmpty {
                 // Handle exception
             } else {
                 showConversion = true