annotate Simoleon/FavoritesView.swift @ 193:7bd79287b955

Add images to readme
author Dennis C. M. <dennis@denniscm.com>
date Wed, 20 Nov 2024 08:59:21 +0000
parents 13d5a8deb6c2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
187
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
1 //
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
2 // FavoritesView.swift
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
3 // Simoleon
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
4 //
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 23/12/21.
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
6 //
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
7
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
8 import SwiftUI
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
9 import CoreData
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
10
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
11 struct FavoritesView: View {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
12 @Environment(\.managedObjectContext) private var viewContext
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
13 @FetchRequest(
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
14 sortDescriptors: [NSSortDescriptor(keyPath: \FavoritePair.baseCurrency, ascending: true)], animation: .default
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
15 ) private var favoritePairs: FetchedResults<FavoritePair>
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
16
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
17 var body: some View {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
18 VStack {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
19 if favoritePairs.isEmpty {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
20 FavoritesPlaceholder()
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
21 } else {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
22 List {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
23 ForEach(favoritePairs, id:\.self) { favoritePair in
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
24 FavoriteRow(baseCurrency: favoritePair.baseCurrency!, quoteCurrency: favoritePair.quoteCurrency!)
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
25 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
26 .onDelete(perform: remove)
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
27 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
28 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
29 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
30 .toolbar {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
31 #if os(iOS)
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
32 EditButton()
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
33 #endif
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
34 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35 .navigationTitle("Favorites")
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
36 .if(UIDevice.current.userInterfaceIdiom == .phone) { content in
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
37 NavigationView { content }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
38 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
39 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
40
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
41 // Remove favorite pair from favorites
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
42 private func remove(offsets: IndexSet) {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
43 withAnimation {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
44 offsets.map { favoritePairs[$0] }.forEach(viewContext.delete)
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
45
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
46 do {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
47 try viewContext.save()
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
48 } catch {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
49 let nsError = error as NSError
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
50 fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
51 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
52 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
53 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
54 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
55
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
56 struct FavoritesView_Previews: PreviewProvider {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
57 static var previews: some View {
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
58 FavoritesView()
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
59 }
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
60 }