69 lines
1.5 KiB
Swift
69 lines
1.5 KiB
Swift
import SwiftUI
|
|
import SFSafeSymbols
|
|
|
|
struct InsertableGallery: View, InsertableCommandView {
|
|
|
|
static let title = "Gallery"
|
|
|
|
static let sheetTitle = "Insert an image gallery"
|
|
|
|
static let icon: SFSymbol = .photoStack
|
|
|
|
final class Model: InsertableCommandModel {
|
|
|
|
@Published
|
|
var images: [FileResource] = []
|
|
|
|
var isReady: Bool {
|
|
!images.isEmpty
|
|
}
|
|
|
|
init() {
|
|
|
|
}
|
|
|
|
var command: String? {
|
|
guard !images.isEmpty else {
|
|
return nil
|
|
}
|
|
return (
|
|
["```\(GalleryBlock.blockId)"] +
|
|
images.map { $0.id } +
|
|
["```"]
|
|
).joined(separator: "\n")
|
|
}
|
|
}
|
|
|
|
@Environment(\.colorScheme)
|
|
private var colorScheme
|
|
|
|
@ObservedObject
|
|
private var model: Model
|
|
|
|
@State
|
|
private var showImagePicker = false
|
|
|
|
init(model: Model) {
|
|
self.model = model
|
|
}
|
|
|
|
var body: some View {
|
|
VStack(spacing: 2) {
|
|
ScrollView(.horizontal) {
|
|
HStack(alignment: .center, spacing: 8) {
|
|
ForEach(model.images) { image in
|
|
PostImageView(image: image)
|
|
}
|
|
}
|
|
}
|
|
Button("Select images", action: { showImagePicker = true })
|
|
.padding(.vertical, 2)
|
|
}
|
|
.sheet(isPresented: $showImagePicker) {
|
|
MultiFileSelectionView(
|
|
selectedFiles: $model.images,
|
|
allowedType: .image)
|
|
}
|
|
}
|
|
}
|