Add image deletion and main selection

This commit is contained in:
Christoph Hagen
2023-03-12 12:14:38 +01:00
parent 9ed0be8cc1
commit 441197144f
3 changed files with 148 additions and 9 deletions

View File

@ -9,6 +9,10 @@ struct CapImagesView: View {
@Binding
var isPresented: Bool
@State
private var selectedCap: CapImage?
init(cap: Binding<Cap?>, database: Database, isPresented: Binding<Bool>) {
self.database = database
@ -50,21 +54,62 @@ struct CapImagesView: View {
ScrollView(.vertical) {
LazyVGrid(columns: [gridItem, gridItem, gridItem, gridItem]) {
ForEach(images) { item in
CachedCapImage(
item,
check: { database.images.cachedImage(item) },
fetch: { await database.images.image(item) },
content: { $0.resizable() },
placeholder: { ProgressView() })
.frame(width: imageSize,
height: imageSize)
.clipShape(Circle())
ZStack(alignment: .topLeading) {
CachedCapImage(
item,
check: { database.images.cachedImage(item) },
fetch: { await database.images.image(item) },
content: { $0.resizable() },
placeholder: { ProgressView() })
.frame(width: imageSize,
height: imageSize)
.clipShape(Circle())
.onLongPressGesture { selectedCap = item }
if item.version == cap?.mainImage {
Image(systemSymbol: .checkmarkCircleFill)
.foregroundColor(.green)
.background(Color.white)
.clipShape(Circle())
}
}
}
}
}
}
.padding(.horizontal)
}
.actionSheet(item: $selectedCap) { item in
ActionSheet(title: Text("Image \(item.version)"), buttons: [
.default(Text("Set as main image")) { setMainImage(item) },
.destructive(Text("Delete image")) { delete(image: item) },
.cancel()
])
}
}
private func delete(image: CapImage) {
Task {
guard let cap = await database.setMainImage(image.version, for: image.cap) else {
return
}
DispatchQueue.main.async {
self.cap = cap
}
}
selectedCap = nil
}
private func setMainImage(_ image: CapImage) {
Task {
guard let cap = await database.setMainImage(image.version, for: image.cap) else {
return
}
DispatchQueue.main.async {
self.cap = cap
}
}
self.selectedCap = nil
}
}