Mercurial > public > lazybear
annotate LazyBear/ContentView.swift @ 164:f74a364441ca
Start clean project
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Wed, 17 Feb 2021 20:27:04 +0100 |
parents | LazyBear/LazyBear/ContentView.swift@9d519f230f26 |
children | 125d268db489 |
rev | line source |
---|---|
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
1 // |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
2 // ContentView.swift |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
3 // LazyBear |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
4 // |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 17/2/21. |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
6 // |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
7 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
8 import SwiftUI |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
9 import CoreData |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
10 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
11 struct ContentView: View { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
12 @Environment(\.managedObjectContext) private var viewContext |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
13 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
14 @FetchRequest( |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
15 sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: true)], |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
16 animation: .default) |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
17 private var items: FetchedResults<Item> |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
18 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
19 var body: some View { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
20 List { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
21 ForEach(items) { item in |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
22 Text("Item at \(item.timestamp!, formatter: itemFormatter)") |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
23 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
24 .onDelete(perform: deleteItems) |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
25 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
26 .toolbar { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
27 #if os(iOS) |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
28 EditButton() |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
29 #endif |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
30 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
31 Button(action: addItem) { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
32 Label("Add Item", systemImage: "plus") |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
33 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
34 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
35 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
36 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
37 private func addItem() { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
38 withAnimation { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
39 let newItem = Item(context: viewContext) |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
40 newItem.timestamp = Date() |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
41 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
42 do { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
43 try viewContext.save() |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
44 } catch { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
45 // Replace this implementation with code to handle the error appropriately. |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
46 // 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. |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
47 let nsError = error as NSError |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
48 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
49 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
50 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
51 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
52 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
53 private func deleteItems(offsets: IndexSet) { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
54 withAnimation { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
55 offsets.map { items[$0] }.forEach(viewContext.delete) |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
56 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
57 do { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
58 try viewContext.save() |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
59 } catch { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
60 // Replace this implementation with code to handle the error appropriately. |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
61 // 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. |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
62 let nsError = error as NSError |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
63 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
64 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
65 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
66 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
67 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
68 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
69 private let itemFormatter: DateFormatter = { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
70 let formatter = DateFormatter() |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
71 formatter.dateStyle = .short |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
72 formatter.timeStyle = .medium |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
73 return formatter |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
74 }() |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
75 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
76 struct ContentView_Previews: PreviewProvider { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
77 static var previews: some View { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
78 ContentView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext) |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
79 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
80 } |