@MainActor class AddCarViewModel: ObservableObject {
@Published var photoUrls : [String] = []
func uploadImages(images: [Image], customerId: String) async throws {
let subFolderId = UUID().uuidString
let pictureFolderRef = Storage.storage().reference().child("CarPhotos").child(customerId).child("\(subFolderId)")
images.enumerated().forEach { index, image in
guard let imageData = image.asUIImage().jpegData(compressionQuality: 0.5) else {
return
}
let pictureReference = pictureFolderRef.child("image_\(index).jpeg")
pictureReference.putData(imageData, metadata: nil) {
metadata, error in
if let error = error {
print("failed to put data")
}
pictureReference.downloadURL { url, error in
if let error = error {
print("error while downloading url ")
}
guard let urlString = url?.absoluteString else {
return
}
self.photoUrls.append(urlString)
}
}
}
}
func addCar(carInfo: Car) async throws {
try await Firestore.firestore().collection("cars").document().setData(from: carInfo)
}
}
VStack {
Button {
Task {
do {
try await viewModel.uploadImages(images: selectedImages, customerId: viewModel.user!.uid)
try await viewModel.addCar(carInfo: Car(photoUrls: viewModel.photoUrls))
} catch {
print(error)
}
}
dismiss()
} label: {
Text("Post")
}
}
Topic:
Developer Tools & Services
SubTopic:
General