Add image deletion and main selection
This commit is contained in:
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user