import Foundation import UIKit import GeneralUtils import Alamofire class CellMucChupWithCamera: BaseTableViewCellUI { var tvTitle: UILabel!, imv: UIImageView! var shootItem: ShootItem! static func registerClass(tableView: UITableView, forCellReuseIdentifier: String) { tableView.register(CellMucChupWithCamera.self, forCellReuseIdentifier: forCellReuseIdentifier) } override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) initView() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) initView() } private func initView() { let stackView = UIStackView() stackView.axis = UILayoutConstraintAxis.horizontal stackView.translatesAutoresizingMaskIntoConstraints = false self.contentView.addSubview(stackView) NSLayoutConstraint.activate([stackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 8), stackView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 8), stackView.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -8), stackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -8)]) tvTitle = UILabel() tvTitle.numberOfLines = 0 stackView.addArrangedSubview(tvTitle) tvTitle.isUserInteractionEnabled = true let tapTitle = UITapGestureRecognizer(target: self, action: #selector(CellMucChupWithCamera.titleClick)) tvTitle.addGestureRecognizer(tapTitle) imv = UIImageView() imv.contentMode = .scaleAspectFit imv.isUserInteractionEnabled = true stackView.addArrangedSubview(imv) imv.widthAnchor.constraint(equalToConstant: 80).isActive = true imv.heightAnchor.constraint(equalToConstant: 60).isActive = true imv.image = #imageLiteral(resourceName:"camera_black_ic").imageWithInsets(insetDimen: 10) ?? #imageLiteral(resourceName:"camera_black_ic") let tap = UITapGestureRecognizer(target: self, action: #selector(CellMucChupWithCamera.btnImvClick)) imv.addGestureRecognizer(tap) } func titleClick() { guard let viewController = self.viewController else { return } if viewController is VCConfirmMucDaChon { return } if let imgs = shootItem.imgs, imgs.count > 0 { VCPageImgs.openController(viewController, imgObjs: imgs) } } func btnImvClick() { guard let viewController = self.viewController else { return } if viewController is VCConfirmMucDaChon { return } let cameraViewController = CameraViewController(croppingEnabled: false, allowsLibraryAccess: true) { image, asset in viewController.dismiss(animated: true, completion: nil) guard let image = image else { return } self.imv?.image = image guard let id = self.shootItem.id, let data = UIImageJPEGRepresentation(image, 1.0) else { return } let signboard = self.shootItem?.signboard ?? 1 self.uploadImage(id: id, signboard: signboard, data: data) } viewController.present(cameraViewController, animated: true, completion: nil) } override func configCellWithData(baseObj: Any, index: Int) { super.configCellWithData(baseObj: baseObj, index: index) shootItem = baseObj as! ShootItem tvTitle.text = shootItem.name if let imgs = shootItem.imgs, imgs.count > 0, let imgUrl = imgs[0].url { setImageUrl(imv: imv, imageUrl: imgUrl) } else { imv.image = #imageLiteral(resourceName:"camera_black_ic").imageWithInsets(insetDimen: 10) ?? #imageLiteral(resourceName:"camera_black_ic") } } //region upload ======= fileprivate func uploadImage(id: Int, signboard: Int, data: Data) { let tvProgress = SwiftOverlays.showBlockingWaitOverlayWithText(LocalizedString("Uploading") + ".....") Alamofire.upload(multipartFormData: { (multipartFormData: MultipartFormData) in multipartFormData.append(data, withName: "file", fileName: "file_\(DataTypeUtils.getCurrentTimeSecond()).jpg", mimeType: "image/jpeg") multipartFormData.append("\(id)".data(using: String.Encoding.utf8)!, withName: "idShooting") multipartFormData.append("\(signboard)".data(using: String.Encoding.utf8)!, withName: "signboard") // if let note = self.shootItem. { //multipartFormData.append("\(note)".data(using: String.Encoding.utf8)!, withName: "note") // } }, to: Constants.PathManager.ROOT_SERVER + "api/board/store", method: .post, encodingCompletion: { (encodingResult: SessionManager.MultipartFormDataEncodingResult) in switch encodingResult { case .success(let upload, _, _): upload.uploadProgress(closure: { progress in CommonUtils.excuteOnMainThread({tvProgress.text = (LocalizedString("Uploading") + " \(Int(progress.fractionCompleted * 100))%")}) }) .responseString { response in SwiftOverlays.removeAllBlockingOverlays() debugPrint("SUCCESS RESPONSE: \(response.result.value)") if let value = response.result.value{ let json = JSON.parse(value) if let isSuccess = json["isSuccess"].bool, isSuccess, let url = json["url"].string{ self.shootItem.addImg(img: ImgObj(url: url, signboard: signboard, date: nil, note: nil)) CommonUtils.showToastLong(text: LocalizedString("successful")) return } } self.handleError() } case .failure(let encodingError): SwiftOverlays.removeAllBlockingOverlays() self.handleError() print("ERROR RESPONSE: \(encodingError)") } }) } fileprivate func handleError() { //DialogUtils.showQuestion(messageParam: <#T##String?##Swift.String?#>, yesAction: <#T##@escaping () -> Void##@escaping () -> Swift.Void#>) } //endregion }