forked from pointfreeco/sqlite-data
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRemindersListRow.swift
More file actions
95 lines (89 loc) · 2.3 KB
/
RemindersListRow.swift
File metadata and controls
95 lines (89 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import CloudKit
import SQLiteData
import SwiftUI
struct RemindersListRow: View {
let remindersCount: Int
let remindersList: RemindersList
var share: CKShare?
@State var editList: RemindersList?
@Dependency(\.defaultDatabase) private var database
@Dependency(\.defaultSyncEngine) private var syncEngine
var body: some View {
HStack {
Image(systemName: "list.bullet.circle.fill")
.font(.largeTitle)
.foregroundStyle(remindersList.color)
.background(
Color.white.clipShape(Circle()).padding(4)
)
VStack(alignment: .leading, spacing: 4) {
Text(remindersList.title)
if let shareMessage {
Text(shareMessage)
.font(.footnote)
.foregroundStyle(Color.secondary)
}
}
Spacer()
Text("\(remindersCount)")
.foregroundStyle(.gray)
}
.swipeActions {
Button {
withErrorReporting {
try database.write { db in
try RemindersList.delete(remindersList)
.execute(db)
}
}
} label: {
Image(systemName: "trash")
}
.tint(.red)
Button {
editList = remindersList
} label: {
Image(systemName: "info.circle")
}
}
.sheet(item: $editList) { list in
NavigationStack {
RemindersListForm(remindersList: RemindersList.Draft(list))
.navigationTitle("Edit list")
}
.presentationDetents([.medium])
}
}
var shareMessage: String? {
guard let share
else { return nil }
if share.owner == share.currentUserParticipant {
let participantNames = share.participants
.filter { $0 != share.currentUserParticipant }
.compactMap { $0.userIdentity.nameComponents?.formatted() }
.joined(separator: ", ")
if !participantNames.isEmpty {
return "Shared with \(participantNames)"
} else {
return "Shared"
}
} else if let ownerName = share.owner.userIdentity.nameComponents?.formatted() {
return "Shared from \(ownerName)"
} else {
return nil
}
}
}
#Preview {
NavigationStack {
List {
RemindersListRow(
remindersCount: 10,
remindersList: RemindersList(
id: UUID(),
title: "Personal"
)
)
}
}
}