Skip to content

Commit

Permalink
[Fix] #275 - Home 관련 로직 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
jeongdung-eo committed Jul 10, 2024
1 parent e51fb6a commit 32aed73
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 121 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,44 @@
import UIKit

import SnapKit
import Then
import Kingfisher

final class HomeBakeryCollectionViewCell: UICollectionViewCell {

// MARK: - UI Property

private let bakeryImage = UIImageView()
private let markStackView = MarkStackView()
// private var markStackView: GBStackView
private let bakeryTitle = UILabel()
private let reviewCount = IconWithTextView(.reviews)
private let bookmarkCount = IconWithTextView(.bookmark)
private let regionStackView = RegionStackView()

// MARK: - Life Cycle
// private var markStackView: GBStackView?
private let bakeryImage: UIImageView = {
let view = UIImageView()
view.contentMode = .scaleAspectFill
view.clipsToBounds = true
return view
}()

private let bakeryTitle: UILabel = {
let label = UILabel()
label.numberOfLines = 1
label.font = .bodyB1
label.textColor = .gbbGray700
label.sizeToFit()
return label
}()

// MARK: - Init

override func prepareForReuse() {
super.prepareForReuse()

markStackView.getMarkStatus(false, false, false)
markStackView.configureIconImage(.bigHACCPMark, .bigVeganMark, .bigGMOMark)
regionStackView.arrangedSubviews.forEach {
regionStackView.removeArrangedSubview($0)
}
}

override init(frame: CGRect) {
super.init(frame: .zero)

setLayout()
setUI()
}
Expand Down Expand Up @@ -80,38 +88,13 @@ final class HomeBakeryCollectionViewCell: UICollectionViewCell {
$0.leading.equalTo(bakeryTitle.snp.leading)
$0.bottom.equalToSuperview().inset(16)
}

bakeryImage.addSubview(markStackView)
markStackView.snp.makeConstraints {
$0.top.leading.equalToSuperview().offset(10)
$0.size.equalTo(CGSize(width: heightConsideringNotch(68), height: heightConsideringNotch(28)))
}
}

private func setUI() {

self.do {
$0.layer.applyShadow(alpha: 0.1, x: 0, y: 0, blur: 10)
$0.contentView.backgroundColor = .white
$0.contentView.makeCornerRound(radius: 5)
$0.contentView.clipsToBounds = true
}

bakeryImage.do {
$0.contentMode = .scaleAspectFill
$0.clipsToBounds = true
}

// markStackView.do {
// $0.configureIconImage(.bigHACCPMark, .bigVeganMark, .bigGMOMark)
// }
//
bakeryTitle.do {
$0.numberOfLines = 1
$0.basic(font: .bodyB1!, color: .gbbGray700!)
$0.sizeToFit()
}

layer.applyShadow(alpha: 0.1, x: 0, y: 0, blur: 10)
contentView.backgroundColor = .white
contentView.makeCornerRound(radius: 5)
contentView.clipsToBounds = true
}

// MARK: - Custom Method
Expand All @@ -125,82 +108,29 @@ final class HomeBakeryCollectionViewCell: UICollectionViewCell {

bookmarkCount.configureHomeCell(count: data.bookmarkCount)
reviewCount.configureHomeCell(count: data.reviewCount)
// markStackView = GBStackView(type: .big, data: [data.certifications.isHaccp,
// data.certifications.isVegan,
// data.certifications.isNonGMO
// ])
// markStackView.getMarkStatus(data.certifications.isHaccp,
// data.certifications.isVegan,
// data.certifications.isNonGMO)

self.configureStackView(with: data.certifications)

// cell builder 머지 후 변경

if data.regions.secondRegion == "" {
regionStackView.removeSecondRegion()
}

regionStackView.configureRegion(data.regions)
}
}


enum GBStackType {
case big
case small

var images: [UIImage]{
switch self {
case .big:
return [.bigHACCPMark, .bigVeganMark, .bigGMOMark]
case .small:
return [.smallHACCPMark, .smallVeganMark, .smallGMOMark]
}
}

var size: Int {
switch self {
case .big:
return 28
case .small:
return 24
}
}
}

final class GBStackView: UIStackView {

init(type: GBStackType, data: [Bool]) {
super.init(frame: .zero)

setUI()
createCells(type: type, from: data).forEach { view in
self.addArrangedSubview(view)
}
}

required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

private func createCells(type: GBStackType, from data: [Bool]) -> [UIImageView] {
let images = type.images
var imageIndex = 0
func configureStackView(with certifications: Certifications) {
let data = [certifications.isHaccp, certifications.isVegan, certifications.isNonGMO]

return data.compactMap { isCertified in
defer { imageIndex += 1 }
guard isCertified, imageIndex < images.count else { return nil }
let imageView = UIImageView(image: images[imageIndex])
imageView.contentMode = .topLeft
imageView.snp.makeConstraints { $0.size.equalTo(type.size) }
return imageView
}
}

private func setLayout() {

}

private func setUI() {
self.axis = .horizontal
self.spacing = -8
// self.markStackView = GBStackView(type: .big, data: data)
//
// if let markStackView = markStackView {
// bakeryImage.addSubview(markStackView)
// markStackView.snp.makeConstraints {
// $0.top.leading.equalToSuperview().offset(10)
// $0.size.equalTo(CGSize(width: heightConsideringNotch(68), height: heightConsideringNotch(28)))
// }
// }
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,11 @@ final class HomeViewController: BaseViewController {
switch item {
case .bakery(let data):
let cell: HomeBakeryCollectionViewCell = collectionView.dequeueReusableCell(for: indexPath)
// cell.configureCellUI(data: data)
// cell.configureCellUI(data: data)
return cell
case .reviews(let data):
let cell: HomeReviewCollectionViewCell = collectionView.dequeueReusableCell(for: indexPath)
// cell.configureCellUI(data: data)
// cell.configureCellUI(data: data)
return cell
case .bottom:
let cell: HomeBottomCollectionViewCell = collectionView.dequeueReusableCell(for: indexPath)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ final class NewHomeViewController: UIViewController {
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: self.layout())
collectionView.showsVerticalScrollIndicator = false
collectionView.backgroundColor = .gbbBackground1
collectionView.registerCells(cells: [HomeBakeryCollectionViewCell.self,
HomeReviewCollectionViewCell.self,
HomeBottomCollectionViewCell.self])
collectionView.register(header: HomeHeaderView.self)
collectionView.register(HomeBakeryCollectionViewCell.self, forCellWithReuseIdentifier: HomeBakeryCollectionViewCell.identifier)
collectionView.register(HomeReviewCollectionViewCell.self, forCellWithReuseIdentifier: HomeReviewCollectionViewCell.identifier)
collectionView.register(HomeBottomCollectionViewCell.self, forCellWithReuseIdentifier: HomeBottomCollectionViewCell.identifier)
collectionView.register(HomeHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: HomeHeaderView.identifier)
collectionView.dataSource = self
return collectionView
}()
Expand Down Expand Up @@ -108,21 +108,35 @@ final class NewHomeViewController: UIViewController {
private func bindOutputToViewModel(_ output: HomeViewModel.Output?) {
guard let output else { return }

output.best
output.bakery
.receive(on: RunLoop.main)
.sink { err in
print("error:\(err)")
} receiveValue: { [weak self] bakery, review in
} receiveValue: { [weak self] bakery in
dump(bakery)
self?.updateList(bakery: bakery, review: review)
self?.updateBakery(bakery: bakery)
}
.store(in: &self.cancelBag)

output.review
.receive(on: RunLoop.main)
.sink { err in
print("error:\(err)")
} receiveValue: { [weak self] review in
dump(review)
self?.updateReview(review: review)
}
.store(in: &self.cancelBag)
}

private func updateList(bakery: [BestBakery], review: [BestReview]) {
private func updateBakery(bakery:[BestBakery]) {
self.bakeryList = bakery
self.collectionView.reloadSections(IndexSet(integersIn: 0 ..< 1))
}

private func updateReview(review: [BestReview]) {
self.reviewList = review
self.collectionView.reloadData()
self.collectionView.reloadSections(IndexSet(integersIn: 1 ..< 2))
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ final class HomeViewModel: ViewModelType {
}

struct Output {
let best: AnyPublisher<([BestBakery], [BestReview]), Error>
let bakery: AnyPublisher<[BestBakery], Error>
let review: AnyPublisher<[BestReview], Error>
}

// MARK: - Property
Expand Down Expand Up @@ -68,9 +69,13 @@ final class HomeViewModel: ViewModelType {
}
.eraseToAnyPublisher()

let best = Publishers.CombineLatest(bakery, review)

return Output(best: best.eraseToAnyPublisher())
// let best = Publishers.CombineLatest(bakery, review)
// .map { (_, _) -> () in }
// .eraseToAnyPublisher()

return Output(bakery: bakery,
review: review)
}
}

Expand Down

0 comments on commit 32aed73

Please sign in to comment.