view Simoleon/UI/ConversionBox.swift @ 167:1940db1ef321

Minor changes
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Sat, 11 Sep 2021 16:30:40 +0200
parents 3913aff613e8
children
line wrap: on
line source

//
//  ConversionBox.swift
//  Simoleon
//
//  Created by Dennis Concepción Martín on 18/07/2021.
//

import SwiftUI

struct ConversionBox: View {
    @ObservedObject var currencyConversion: CurrencyConversion
    @State private var amount = ""
    @State private var isEditing = false

    let networkHelper = NetworkHelper()
    let currencyDetails: [String: CurrencyModel] = try! readJson(from: "Currencies.json")
    
    var body: some View {
        VStack(alignment: .leading) {
            let baseCurrencyName = currencyDetails[currencyConversion.baseSymbol]!.name
            Text("\(baseCurrencyName) (\(currencyConversion.baseSymbol))")
                .font(.callout)
                .fontWeight(.semibold)
            
            ConversionTextfield(amount: $amount, isEditing: $isEditing)
            Divider()

            let quoteCurrencyName = currencyDetails[currencyConversion.quoteSymbol]!.name
            Text("\(quoteCurrencyName) (\(currencyConversion.quoteSymbol))")
                .font(.callout)
                .fontWeight(.semibold)
            
            if currencyConversion.isShowing {
                let conversion = convert()
                Text("\(conversion, specifier: "%.2f")")
                    .font(Font.title.weight(.semibold))
                    .lineLimit(1)
                    .padding(.top, 1)
            } else {
                ProgressView()
            }
        }
        .toolbar {
            ToolbarItem(placement: .navigationBarTrailing) {
                if isEditing {
                    Button(action: {
                        UIApplication.shared.dismissKeyboard()
                        isEditing = false
                    }) {
                        Text("Done")
                    }
                }
            }
        }
    }
    
    private func convert() -> Double {
        guard let amount = Double(amount) else { return 0  }
        guard let price = currencyConversion.quote.price else { return 0 }

        return amount * price
    }
}

struct ConversionBox_Previews: PreviewProvider {
    static var previews: some View {
        ConversionBox(currencyConversion: CurrencyConversion())
    }
}