annotate Simoleon/Favourites.swift @ 24:bda6a55d027a

Add Conversion to Favourites
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Tue, 20 Jul 2021 10:24:21 +0100
parents 3596690dda73
children d95582268b44
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
1 //
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
2 // Favourites.swift
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
3 // Simoleon
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
4 //
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 19/07/2021.
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
6 //
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
7
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
8 import SwiftUI
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
9
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
10 struct Favourites: View {
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
11 @Environment(\.managedObjectContext) private var viewContext
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
12 @FetchRequest(
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
13 sortDescriptors: [NSSortDescriptor(keyPath: \Favourite.currencyPair, ascending: true)],
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
14 animation: .default)
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
15 private var favourite: FetchedResults<Favourite>
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
16
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
17 var body: some View {
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
18 List {
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
19 ForEach(favourite) { favourite in
24
bda6a55d027a Add Conversion to Favourites
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 22
diff changeset
20 NavigationLink(destination: Conversion(fetchUserSettings: false, currencyPair: favourite.currencyPair)) {
bda6a55d027a Add Conversion to Favourites
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 22
diff changeset
21 CurrencyRow(currencyPair: favourite.currencyPair)
bda6a55d027a Add Conversion to Favourites
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 22
diff changeset
22 }
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
23 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
24 .onDelete(perform: removeFromFavourites)
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
25 }
22
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
26 .navigationTitle("Favourites")
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
27 .toolbar {
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
28 #if os(iOS)
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
29 EditButton()
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
30 #endif
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
31 }
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
32 .if(UIDevice.current.userInterfaceIdiom == .phone) { content in
22
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
33 NavigationView { content }
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
34 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
36
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
37 private func removeFromFavourites(offsets: IndexSet) {
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
38 withAnimation {
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
39 offsets.map { favourite[$0] }.forEach(viewContext.delete)
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
40
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
41 do {
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
42 try viewContext.save()
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
43 } catch {
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
44 let nsError = error as NSError
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
45 fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
46 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
47 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
48 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
49 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
50
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
51 struct Favourites_Previews: PreviewProvider {
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
52 static var previews: some View {
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
53 Favourites()
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
54 .environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
55 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
56 }