Mercurial > public > simoleon
annotate Simoleon/ContentView.swift @ 181:5a9430fd6b4d
restart project to new version
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Wed, 08 Dec 2021 10:52:11 +0100 |
parents | 7c4a789e51ba |
children | ba3ebe8cefe5 |
rev | line source |
---|---|
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
1 // |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
2 // ContentView.swift |
181
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
3 // simoleon |
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
4 // |
181
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
5 // Created by Dennis Concepción Martín on 8/12/21. |
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
6 // |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
7 |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
8 import SwiftUI |
181
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
9 import CoreData |
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
10 |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
11 struct ContentView: View { |
181
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
12 @Environment(\.managedObjectContext) private var viewContext |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
13 |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
14 @FetchRequest( |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
15 sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: true)], |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
16 animation: .default) |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
17 private var items: FetchedResults<Item> |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
18 |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
19 var body: some View { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
20 NavigationView { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
21 List { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
22 ForEach(items) { item in |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
23 NavigationLink { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
24 Text("Item at \(item.timestamp!, formatter: itemFormatter)") |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
25 } label: { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
26 Text(item.timestamp!, formatter: itemFormatter) |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
27 } |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
28 } |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
29 .onDelete(perform: deleteItems) |
179
7c4a789e51ba
add views
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
177
diff
changeset
|
30 } |
181
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
31 .toolbar { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
32 ToolbarItem(placement: .navigationBarTrailing) { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
33 EditButton() |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
34 } |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
35 ToolbarItem { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
36 Button(action: addItem) { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
37 Label("Add Item", systemImage: "plus") |
179
7c4a789e51ba
add views
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
177
diff
changeset
|
38 } |
181
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
39 } |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
40 } |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
41 Text("Select an item") |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
42 } |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
43 } |
179
7c4a789e51ba
add views
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
177
diff
changeset
|
44 |
181
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
45 private func addItem() { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
46 withAnimation { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
47 let newItem = Item(context: viewContext) |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
48 newItem.timestamp = Date() |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
49 |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
50 do { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
51 try viewContext.save() |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
52 } catch { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
53 // Replace this implementation with code to handle the error appropriately. |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
54 // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
55 let nsError = error as NSError |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
56 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") |
179
7c4a789e51ba
add views
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
177
diff
changeset
|
57 } |
7c4a789e51ba
add views
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
177
diff
changeset
|
58 } |
7c4a789e51ba
add views
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
177
diff
changeset
|
59 } |
181
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
60 |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
61 private func deleteItems(offsets: IndexSet) { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
62 withAnimation { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
63 offsets.map { items[$0] }.forEach(viewContext.delete) |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
64 |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
65 do { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
66 try viewContext.save() |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
67 } catch { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
68 // Replace this implementation with code to handle the error appropriately. |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
69 // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
70 let nsError = error as NSError |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
71 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
72 } |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
73 } |
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
74 } |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
75 } |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
76 |
181
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
77 private let itemFormatter: DateFormatter = { |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
78 let formatter = DateFormatter() |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
79 formatter.dateStyle = .short |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
80 formatter.timeStyle = .medium |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
81 return formatter |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
82 }() |
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
83 |
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
84 struct ContentView_Previews: PreviewProvider { |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
85 static var previews: some View { |
181
5a9430fd6b4d
restart project to new version
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
179
diff
changeset
|
86 ContentView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext) |
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
87 } |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
88 } |