view Simoleon/Helpers/CurrencyConversion.swift @ 10:ed35ef4738b9

Implementing currency conversion and search
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Mon, 12 Jul 2021 17:44:55 +0100
parents
children
line wrap: on
line source

//
//  CurrencyConversion.swift
//  Simoleon
//
//  Created by Dennis Concepción Martín on 12/07/2021.
//

import SwiftUI

struct CurrencyConversion: View {
    var currencyQuote: CurrencyQuoteModel
    let currencies: [String: CurrencyModel] = parseJson("Currencies.json")
    @State private var inputAmount: Float = 100
    
    var body: some View {
        VStack {
            let symbols = currencyQuote.symbol.split(separator: "/")
            // MARK: - First currency row
            VStack {
                RoundedRectangle(cornerRadius: 10)
                    .rectangleModifier(Color("Bone"), 80)
                
                RoundedRectangle(cornerRadius: 10)
                    .rectangleModifier(Color(.systemBackground), 80)
                    .overlay(
                        HStack {
                            SingleFlag(flag: currencies[String(symbols[0])]!.flag)
                            Text(String(symbols[0]))
                                .fontWeight(.semibold)
                                .padding(.leading)
                            
                            TextField("Amount", value: $inputAmount, formatter: NumberFormatter())
                                .padding(.leading)
                        }
                        .padding(.horizontal)
                    )
                    .offset(x: -10.0, y: -100.0)
                    .padding(.bottom, -100)
            }
            .padding(.leading, 10)
            .padding([.horizontal, .bottom])
            
            // MARK: - Second currency row
            VStack {
                RoundedRectangle(cornerRadius: 10)
                    .rectangleModifier(Color("Bone"), 80)

                RoundedRectangle(cornerRadius: 10)
                    .rectangleModifier(Color(.systemBackground), 80)
                    .overlay(
                        HStack {
                            SingleFlag(flag: currencies[String(symbols[1])]!.flag)
                            Text(String(symbols[1]))
                                .fontWeight(.semibold)
                                .padding(.leading)
                            
                            let conversion = inputAmount * currencyQuote.price
                            Text("\(conversion, specifier: "%.2f")")
                                .padding(.leading)
                            Spacer()
                        }
                        .padding(.horizontal)
                    )
                    .offset(x: -10.0, y: -100.0)
                    .padding(.bottom, -100)
            }
            .padding(.leading, 10)
            .padding(.horizontal)
        }
    }
}

struct CurrencyConversion_Previews: PreviewProvider {
    static var previews: some View {
        let currencyQuote: CurrencyQuoteModel = parseJson("CurrencyQuoteData.json")
        
        CurrencyConversion(currencyQuote: currencyQuote)
    }
}