Hi everyone.
I am trying to use Apollo Upload functionality but it still doesnt work and i am getting errors - “string is not an Upload”
This is a function in our NetworkService.swift call
func addCertificatesToCompany(companyId: String, files: [GraphQLFile]) -> AnyPublisher<[AddCertificatesToCompanyMutation.Data.AddCertificatesToCompany]?, Error> {
let uploadArray: [Upload?] = files.map { $0.asGraphQLUpload() }
let mutation = AddCertificatesToCompanyMutation(companyId: companyId, files: .some(uploadArray))
return Future<[AddCertificatesToCompanyMutation.Data.AddCertificatesToCompany]?, Error> { [unowned self] promise in
apolloClient.upload(operation: mutation, files: files) { result in
switch result {
case .success(let operationResult):
if let data = operationResult.data?.addCertificatesToCompany {
promise(.success(data))
} else if let errors = operationResult.errors {
promise(.failure(NetworkServiceError.graphqlErrors(errors)))
} else {
promise(.failure(NetworkServiceError.genericError))
}
case .failure(let error):
promise(.failure(error))
}
}
}
.eraseToAnyPublisher()
}
ProjectManager.swift
func addCertificatesToCompany(companyId: String, files: [GraphQLFile]) -> AnyPublisher<[AddCertificatesToCompanyMutation.Data.AddCertificatesToCompany]?, Error> {
return networkService.addCertificatesToCompany(companyId: companyId, files: files)
}
This is our ViewModel call to append images.
private func addCertificateToCompany(companyID: String) {
guard let photoIDCertificateModel = self.photoIDCertificateModel, let proofDocumentCertificateModel = self.proofDocumentCertificateModel else {
return
}
let files: [GraphQLFile] = [
GraphQLFile(fieldName: "photoIDCertificate", originalName: photoIDCertificateModel.fileNameWithExt, mimeType: photoIDCertificateModel.mimeType, data: photoIDCertificateModel.data ?? Data()),
GraphQLFile(fieldName: "proofDocumentCertificate", originalName: proofDocumentCertificateModel.fileNameWithExt, mimeType: proofDocumentCertificateModel.mimeType, data: proofDocumentCertificateModel.data ?? Data())
]
ProjectManager.shared.addCertificatesToCompany(companyId: companyID, files: files)
.sink { result in
switch result {
case .finished:
break
case .failure(let error):
print("Error adding certificates to company: \(error)")
}
} receiveValue: { data in
if let data = data {
print(data)
}
}
.store(in: &cancellables)
}
Extension for GraphQLFile
extension GraphQLFile {
func asGraphQLUpload() -> Upload? {
return self.data?.base64EncodedString()
}
}
Upload.swift
// @generated
// This file was automatically generated and can be edited to
// implement advanced custom scalar functionality.
//
// Any changes to this file will not be overwritten by future
// code generation execution.
import ApolloAPI
public typealias Upload = String
type or paste code here