Mercurial > public > simoleon
view Simoleon/Conversion.swift @ 19:94fd7ac93060
Redesign
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Sun, 18 Jul 2021 20:00:05 +0100 |
parents | |
children | c3dda63f50ed |
line wrap: on
line source
// // Conversion.swift // Simoleon // // Created by Dennis Concepción Martín on 18/07/2021. // import SwiftUI import Alamofire struct Conversion: View { @State private var mainCurrency = "USD" @State private var secondaryCurrency = "GBP" @State private var amountToConvert = "1000" @State private var price: Double = 1.00 @State private var showingConversion = false @State private var showingCurrencySelector = false @State private var selectingMainCurrency = false @State private var currencyPairNotFound = false let currencyMetadata: [String: CurrencyMetadataModel] = parseJson("CurrencyMetadata.json") var body: some View { ScrollView(showsIndicators: false) { VStack(alignment: .leading) { HStack { Button(action: { selectingMainCurrency = true; showingCurrencySelector = true }) { CurrencyButton(currency: $mainCurrency) } Button(action: { selectingMainCurrency = false; showingCurrencySelector = true }) { CurrencyButton(currency: $secondaryCurrency) } } ConversionBox( mainCurrency: $mainCurrency, secondaryCurrency: $secondaryCurrency, amountToConvert: $amountToConvert, price: $price, showingConversion: $showingConversion, showingCurrencySelector: $showingCurrencySelector, currencyPairNotFound: $currencyPairNotFound ) } .padding() .onAppear { requestApi(mainCurrency, secondaryCurrency) } .onChange(of: showingCurrencySelector, perform: { showingCurrencySelector in if !showingCurrencySelector { requestApi(mainCurrency, secondaryCurrency) } }) .sheet(isPresented: $showingCurrencySelector) { CurrencySelector( mainCurrencySelected: $mainCurrency, secondaryCurrencySelected: $secondaryCurrency, showingCurrencySelector: $showingCurrencySelector, selectingMainCurrency: $selectingMainCurrency ) } } .navigationBarHidden(true) } private func requestApi(_ mainCurrency: String, _ secondaryCurrency: String) { let url = "https://api.1forge.com/quotes?pairs=\(mainCurrency)/\(secondaryCurrency)&api_key=BFWeJQ3jJtqqpDv5ArNis59pAlFcQ4KF" AF.request(url).responseDecodable(of: [CurrencyQuoteModel].self) { response in self.showingConversion = false self.currencyPairNotFound = false if let currencyQuotes = response.value { if let price = currencyQuotes.first?.price { self.price = price self.showingConversion = true } else { self.currencyPairNotFound = true } } else { // Handle error } } } } struct Conversion_Previews: PreviewProvider { static var previews: some View { NavigationView { Conversion() } } }