05/11 Update issue image upload

This commit is contained in:
Nguyen Ngo
2026-05-11 17:31:21 -04:00
parent 6367dac1e6
commit 9fd3f5b829
6 changed files with 223 additions and 67 deletions
@@ -578,6 +578,53 @@ struct LibraryPickerView: UIViewControllerRepresentable {
}
}
// Multi-image Library Picker PHPickerViewController with configurable limit
struct MultiLibraryPickerView: UIViewControllerRepresentable {
/// Maximum number of images the user may select in this session.
var selectionLimit: Int
var onSelected: ([UIImage]) -> Void
func makeUIViewController(context: Context) -> PHPickerViewController {
var config = PHPickerConfiguration()
config.filter = .images
config.selectionLimit = selectionLimit
let picker = PHPickerViewController(configuration: config)
picker.delegate = context.coordinator
return picker
}
func updateUIViewController(_ vc: PHPickerViewController, context: Context) {}
func makeCoordinator() -> Coordinator { Coordinator(self) }
class Coordinator: NSObject, PHPickerViewControllerDelegate {
let parent: MultiLibraryPickerView
init(_ parent: MultiLibraryPickerView) { self.parent = parent }
func picker(_ picker: PHPickerViewController,
didFinishPicking results: [PHPickerResult]) {
picker.dismiss(animated: true)
guard !results.isEmpty else { return }
var images: [UIImage] = []
let group = DispatchGroup()
for result in results {
guard result.itemProvider.canLoadObject(ofClass: UIImage.self) else { continue }
group.enter()
result.itemProvider.loadObject(ofClass: UIImage.self) { object, _ in
if let img = object as? UIImage { images.append(img) }
group.leave()
}
}
group.notify(queue: .main) {
self.parent.onSelected(images)
}
}
}
}
// MARK: - TableFieldView
struct TableFieldView: View {