Mercurial > public > simoleon
view Simoleon/UI/CurrencyList.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
// // CurrencyList.swift // Simoleon // // Created by Dennis Concepción Martín on 24/8/21. // import SwiftUI struct CurrencyList: View { var currencies: [String] var selection: Selection @ObservedObject var currencyConversion: CurrencyConversion @State private var searchCurrency = "" @Environment(\.presentationMode) private var presentation let currencyDetails: [String: CurrencyModel] = try! readJson(from: "Currencies.json") var searchResults: [String] { if searchCurrency.isEmpty { return currencies.sorted() } else { return currencies.filter {$0.contains(searchCurrency.uppercased())} } } var body: some View { NavigationView { List { SearchBar(placeholder: "Search...", text: $searchCurrency) .padding(.vertical, 4) .accessibilityIdentifier("CurrencySearchBar") ForEach(searchResults, id: \.self) { symbol in Button(action: { if selection == .baseSymbol { currencyConversion.baseSymbol = symbol } else { currencyConversion.quoteSymbol = symbol } presentation.wrappedValue.dismiss() }) { let currency = currencyDetails[symbol]! CurrencyRow(currency: currency) .padding(.vertical, 4) } } } .listStyle() .navigationTitle("Currencies") .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .cancellationAction) { Button(action: { presentation.wrappedValue.dismiss() }) { Text("Cancel") } } } } } enum Selection { case baseSymbol, quoteSymbol } } extension View { func listStyle() -> some View { self.modifier(ListModifier()) } } struct CurrencyList_Previews: PreviewProvider { static var previews: some View { CurrencyList(currencies: ["USD"], selection: .baseSymbol, currencyConversion: CurrencyConversion()) } }