Mercurial > public > lazybear
annotate LazyBear/ContentView.swift @ 463:783b567800d9
Starts new version
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Sat, 17 Jul 2021 09:33:26 +0100 |
parents | c6913f0ce46e |
children | 6953d83060a4 |
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 |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
3 // lazybear |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
4 // |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
5 // Created by Dennis Concepción Martín on 17/07/2021. |
163
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 |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
9 import CoreData |
163
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 { |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
12 @Environment(\.managedObjectContext) private var viewContext |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
13 |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
14 @FetchRequest( |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
15 sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: true)], |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
16 animation: .default) |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
17 private var items: FetchedResults<Item> |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
18 |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
19 var body: some View { |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
20 List { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
21 ForEach(items) { item in |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
22 Text("Item at \(item.timestamp!, formatter: itemFormatter)") |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
23 } |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
24 .onDelete(perform: deleteItems) |
385
7aab87e16661
Delete HelperView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
378
diff
changeset
|
25 } |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
26 .toolbar { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
27 #if os(iOS) |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
28 EditButton() |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
29 #endif |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
30 |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
31 Button(action: addItem) { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
32 Label("Add Item", systemImage: "plus") |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
33 } |
321
8f8d5ad3dfa0
Preparing backend requests
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
307
diff
changeset
|
34 } |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
35 } |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
36 |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
37 private func addItem() { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
38 withAnimation { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
39 let newItem = Item(context: viewContext) |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
40 newItem.timestamp = Date() |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
41 |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
42 do { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
43 try viewContext.save() |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
44 } catch { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
45 // Replace this implementation with code to handle the error appropriately. |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
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. |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
47 let nsError = error as NSError |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
48 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
49 } |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
50 } |
395
a0cf8fe47044
Fix minor bugs
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
386
diff
changeset
|
51 } |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
52 |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
53 private func deleteItems(offsets: IndexSet) { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
54 withAnimation { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
55 offsets.map { items[$0] }.forEach(viewContext.delete) |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
56 |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
57 do { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
58 try viewContext.save() |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
59 } catch { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
60 // Replace this implementation with code to handle the error appropriately. |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
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. |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
62 let nsError = error as NSError |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
63 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
64 } |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
65 } |
449
4255f94d0767
Minor updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
425
diff
changeset
|
66 } |
4255f94d0767
Minor updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
425
diff
changeset
|
67 } |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
68 |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
69 private let itemFormatter: DateFormatter = { |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
70 let formatter = DateFormatter() |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
71 formatter.dateStyle = .short |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
72 formatter.timeStyle = .medium |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
73 return formatter |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
74 }() |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
75 |
163
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 { |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
78 ContentView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext) |
163
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 } |