Mercurial > public > simoleon
annotate Simoleon/FavoritesView.swift @ 189:9f044d33d8ac 2.0.0
add merge policy
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Thu, 23 Dec 2021 16:43:00 +0100 |
parents | 13d5a8deb6c2 |
children |
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 } |