// // ReferralView.swift // GME Remit // // Created by Armaan Shrestha on 21/08/2022. // Copyright © 2022 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit private let reuseIdentifier = "cell" class ReferralView: UIView { lazy var containerView: UIView = { let view = UIView() view.backgroundColor = .themeSubBackground view.isUserInteractionEnabled = true view.translatesAutoresizingMaskIntoConstraints = false return view }() private var collectionView: UICollectionView! var screenWidth = UIScreen.main.bounds.width var screenHeight = UIScreen.main.bounds.height var serviceIconSize: CGFloat = 65 var serviceIconSpacing: CGFloat = 14 public var data: [ReferralDetails]? { didSet { collectionView.reloadData() } } override init(frame: CGRect) { super.init(frame: frame) setup() } required init?(coder: NSCoder) { super.init(coder: coder) setup() fatalError("init(coder:) has not been implemented") } func setup() { setupView() } func setupView() { self.backgroundColor = .black self.addSubview(containerView) let layout = UICollectionViewFlowLayout() collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) collectionView.delegate = self collectionView.dataSource = self collectionView.register(ReferralCell.self, forCellWithReuseIdentifier: reuseIdentifier) collectionView.backgroundColor = .clear collectionView.isScrollEnabled = true // Hide Scroll bars collectionView.showsHorizontalScrollIndicator = false collectionView.showsVerticalScrollIndicator = false collectionView.translatesAutoresizingMaskIntoConstraints = false // Avoids shadow of collection view cell from being clipped collectionView.clipsToBounds = false containerView.addSubview(collectionView) setupLayoutConstraints() // setupClickListiner() } func setupLayoutConstraints() { NSLayoutConstraint.activate([ containerView.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor), containerView.leadingAnchor.constraint(equalTo: leadingAnchor), containerView.trailingAnchor.constraint(equalTo: trailingAnchor), containerView.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor) ]) NSLayoutConstraint.activate([ collectionView.topAnchor.constraint(equalTo: containerView.topAnchor), collectionView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor), collectionView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor), collectionView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor) ]) } } extension ReferralView: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return data?.count ?? 0 // return 4 } public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! ReferralCell let item = data![indexPath.row] let dates = (item.createdDate ?? "").split(separator: " ") let date = dates[0].replacingOccurrences(of: "/", with: "-", options: .literal, range: nil) cell.titleText = date cell.amountText = item.rewardAmount ?? "" cell.typeText = item.rewardType ?? "" return cell } public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let iconHeight = serviceIconSize return CGSize(width: collectionView.frame.width, height: iconHeight) } public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { return serviceIconSpacing } } class ReferralCell: UICollectionViewCell { lazy var wrapperView: UIView = { let view = UIView() view.backgroundColor = .clear view.set(cornerRadius: 5) view.translatesAutoresizingMaskIntoConstraints = false return view }() lazy var mainStackView: UIStackView = { let stackView = UIStackView() stackView.axis = .vertical stackView.spacing = 10 stackView.translatesAutoresizingMaskIntoConstraints = false return stackView }() lazy var titleStackView : UIStackView = { let stackView = UIStackView() stackView.axis = .horizontal stackView.spacing = 5 stackView.translatesAutoresizingMaskIntoConstraints = false return stackView }() lazy var titleLabel: UILabel = { let label = UILabel() label.text = "text here" label.font = .sanfrancisco(.semibold, size: 16) label.numberOfLines = 1 label.textColor = .themeBlack label.translatesAutoresizingMaskIntoConstraints = false return label }() lazy var amountLabel: UILabel = { let label = UILabel() label.text = "text here" label.font = .sanfrancisco(.bold, size: 14) label.numberOfLines = 1 label.textColor = .themeBlue label.translatesAutoresizingMaskIntoConstraints = false return label }() lazy var typeLabel: UILabel = { let label = UILabel() label.text = "text here" label.font = .sanfrancisco(.regular, size: 14) label.numberOfLines = 1 label.textColor = .themeBlack label.translatesAutoresizingMaskIntoConstraints = false return label }() var titleText = String() { didSet { titleLabel.text = titleText } } var amountText = String() { didSet { amountLabel.text = amountText } } var verticalLine: UIView = { var view = UIView() view.backgroundColor = .themeGray2 view.translatesAutoresizingMaskIntoConstraints = false return view }() var typeText = String() { didSet { typeLabel.text = typeText } } override init(frame: CGRect) { super.init(frame: frame) setupView() } required init?(coder: NSCoder) { super.init(coder: coder) } override func awakeFromNib() { super.awakeFromNib() } func setupView() { contentView.addSubview(wrapperView) wrapperView.addSubview(mainStackView) wrapperView.addSubview(verticalLine) mainStackView.addArrangedSubview(titleStackView) mainStackView.addArrangedSubview(typeLabel) titleStackView.addArrangedSubview(titleLabel) titleStackView.addArrangedSubview(amountLabel) setupConstraint() } private func setupConstraint() { NSLayoutConstraint.activate([ wrapperView.topAnchor.constraint(equalTo: contentView.topAnchor), wrapperView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), wrapperView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor) ]) NSLayoutConstraint.activate([ mainStackView.topAnchor.constraint(equalTo: wrapperView.topAnchor, constant: 20), mainStackView.leadingAnchor.constraint(equalTo: wrapperView.leadingAnchor, constant: 20), mainStackView.trailingAnchor.constraint(equalTo: wrapperView.trailingAnchor, constant: -20), mainStackView.bottomAnchor.constraint(equalTo: wrapperView.bottomAnchor, constant: -20) ]) NSLayoutConstraint.activate([ verticalLine.bottomAnchor.constraint(equalTo: wrapperView.bottomAnchor), verticalLine.leadingAnchor.constraint(equalTo: wrapperView.leadingAnchor, constant: 10), verticalLine.trailingAnchor.constraint(equalTo: wrapperView.trailingAnchor, constant: -10), verticalLine.heightAnchor.constraint(equalToConstant: 1) ]) } }