Something went wrong on our end
-
Bruno Muniz authoredBruno Muniz authored
SearchRightView.swift 4.88 KiB
import UIKit
import Shared
final class SearchRightView: UIView {
let statusLabel = UILabel()
let imageView = UIImageView()
let stackView = UIStackView()
let overlayView = OverlayView()
let animationView = DotAnimation()
let actionButton = CapsuleButton()
init() {
super.init(frame: .zero)
imageView.contentMode = .center
actionButton.setStyle(.brandColored)
statusLabel.numberOfLines = 0
statusLabel.textAlignment = .center
statusLabel.textColor = Asset.neutralWhite.color
statusLabel.font = Fonts.Mulish.regular.font(size: 14.0)
stackView.spacing = 15
stackView.axis = .vertical
stackView.addArrangedSubview(animationView)
stackView.addArrangedSubview(imageView)
stackView.addArrangedSubview(statusLabel)
stackView.addArrangedSubview(actionButton)
imageView.isHidden = true
actionButton.isHidden = true
animationView.isHidden = false
addSubview(overlayView)
addSubview(stackView)
setupConstraints()
}
required init?(coder: NSCoder) { nil }
func update(status: ScanningStatus) {
setupTitle(for: status)
setupImageView(for: status)
setupActionButton(for: status)
setupCornerColors(for: status)
setupAnimationView(for: status)
}
private func setupTitle(for status: ScanningStatus) {
let title: String
switch status {
case .success:
title = Localized.Scan.Status.success
case .reading:
title = Localized.Scan.Status.reading
case .processing:
title = Localized.Scan.Status.processing
case .failed(let scanningError):
switch scanningError {
case .unknown(let content):
title = content
case .requestOpened:
title = Localized.Scan.Error.requested
case .alreadyFriends(let name):
title = Localized.Scan.Error.alreadyFriends(name)
case .cameraPermission:
title = Localized.Scan.Error.cameraPermissionNeeded
}
}
let attString = NSMutableAttributedString(string: title)
let paragraph = NSMutableParagraphStyle()
paragraph.alignment = .center
paragraph.lineHeightMultiple = 1.35
attString.addAttribute(.paragraphStyle, value: paragraph)
attString.addAttribute(.foregroundColor, value: Asset.neutralWhite.color)
attString.addAttribute(.font, value: Fonts.Mulish.regular.font(size: 14.0) as Any)
if title.contains("#") {
attString.addAttribute(name: .foregroundColor, value: Asset.brandPrimary.color, betweenCharacters: "#")
}
statusLabel.attributedText = attString
}
private func setupImageView(for status: ScanningStatus) {
let image: UIImage?
switch status {
case .reading, .processing:
image = nil
case .success:
image = Asset.sharedSuccess.image
case .failed(_):
image = Asset.scanError.image
}
imageView.image = image
imageView.isHidden = image == nil
}
private func setupActionButton(for status: ScanningStatus) {
let buttonTitle: String?
switch status {
case .failed(.requestOpened):
buttonTitle = Localized.Scan.requests
case .failed(.alreadyFriends(_)):
buttonTitle = Localized.Scan.contact
case .failed(.cameraPermission):
buttonTitle = Localized.Scan.settings
case .reading, .processing, .success, .failed(.unknown(_)):
buttonTitle = nil
}
actionButton.setTitle(buttonTitle, for: .normal)
actionButton.isHidden = buttonTitle == nil
}
private func setupCornerColors(for status: ScanningStatus) {
let color: UIColor
switch status {
case .reading, .processing:
color = Asset.brandPrimary.color
case .success:
color = Asset.accentSuccess.color
case .failed(_):
color = Asset.accentDanger.color
}
overlayView.updateCornerColor(color)
}
private func setupAnimationView(for status: ScanningStatus) {
switch status {
case .reading, .processing:
animationView.isHidden = false
case .success, .failed(_):
animationView.isHidden = true
}
}
private func setupConstraints() {
overlayView.snp.makeConstraints {
$0.top.equalToSuperview()
$0.left.equalToSuperview()
$0.right.equalToSuperview()
$0.bottom.equalToSuperview()
}
stackView.snp.makeConstraints {
$0.left.equalToSuperview().offset(57)
$0.right.equalToSuperview().offset(-57)
$0.bottom.equalTo(safeAreaLayoutGuide).offset(-100)
}
}
}