Skip to content

Commit

Permalink
Merge pull request #109 from boostcampwm-2022/feature/QuestViewEmptyS…
Browse files Browse the repository at this point in the history
…pace

Feature/quest view empty space
  • Loading branch information
jinwoong16 committed Dec 8, 2022
2 parents 495d787 + 23a83ee commit 744fc6a
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 37 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "NoMoreQuests.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -16,92 +16,106 @@ final class HomeViewController: UIViewController {
case showAddQuestsFlow
case showProfileFlow
}

var coordinatorPublisher = PublishSubject<Event>()

private var viewModel: HomeViewModel!
private var disposableBag = DisposeBag()
private var questViewDelegate: QuestViewDelegate?

// MARK: - Components
private lazy var scrollView: UIScrollView = {
return UIScrollView()
}()

private lazy var stackView: UIStackView = {
let stackView = UIStackView()
stackView.axis = .vertical

return stackView
}()

private lazy var statusView: StatusView = {
return StatusView()
}()

private lazy var calendarView: CalendarView = {
return CalendarView()
}()

private lazy var questView: QuestView = {
let questView = QuestView()

return questView
}()

private lazy var questViewHeader: QuestViewHeader = {
return QuestViewHeader()
}()


private lazy var emptySpace: UIImageView = {
let emptySpace = UIImageView()
emptySpace.image = UIImage(named: "NoMoreQuests")
emptySpace.isHidden = true

return emptySpace
}()

// MARK: - Life Cycle
static func create(with viewModel: HomeViewModel) -> HomeViewController {
let vc = HomeViewController()
vc.viewModel = viewModel

return vc
}

override func viewDidLoad() {
super.viewDidLoad()

questViewDelegate = QuestViewDelegate(header: questViewHeader)

questView.delegate = questViewDelegate

view.backgroundColor = .white

configureUI()

bind()
}

private func configureUI() {
stackView.addArrangedSubview(statusView)
stackView.addArrangedSubview(calendarView)
stackView.addArrangedSubview(questView)

stackView.addArrangedSubview(emptySpace)

scrollView.addSubview(stackView)

view.addSubview(scrollView)

scrollView.snp.makeConstraints { make in
make.edges.equalTo(view.safeAreaLayoutGuide)
}

stackView.snp.makeConstraints { make in
make.edges.equalToSuperview()
make.width.equalToSuperview()
}

statusView.snp.makeConstraints { make in
make.height.equalTo(100)
}

calendarView.snp.makeConstraints { make in
make.height.equalTo(calendarView.snp.width).multipliedBy(1.4)
}

emptySpace.snp.makeConstraints { make in
make.width.equalToSuperview()
make.height.equalTo(150)
}
}

private func bind() {
let viewDidLoad = Observable.just(Date()).asObservable()
let itemDidClick = questView.rx.modelSelected(Quest.self).asObservable()
Expand Down Expand Up @@ -136,7 +150,7 @@ final class HomeViewController: UIViewController {
dailyQuestCompletion.day
}
.asObservable()

let output = viewModel.transform(
input: HomeViewModel.Input(
viewDidLoad: viewDidLoad,
Expand Down Expand Up @@ -168,8 +182,8 @@ final class HomeViewController: UIViewController {
self?.calendarView.dataSource.apply(snapshot, animatingDifferences: false)
self?.calendarView.monthCollectionView.layoutIfNeeded()
self?.calendarView.monthCollectionView.scrollToItem(at: IndexPath(item: 0, section: 1),
at: .centeredHorizontally,
animated: false)
at: .centeredHorizontally,
animated: false)
})
.disposed(by: disposableBag)

Expand All @@ -184,26 +198,32 @@ final class HomeViewController: UIViewController {
questViewHeader
.buttonDidClick
.bind(onNext: { [weak self] _ in
self?.coordinatorPublisher.onNext(.showAddQuestsFlow)
})
self?.coordinatorPublisher.onNext(.showAddQuestsFlow)
})
.disposed(by: disposableBag)
}

private func bindToQuestView(with output: HomeViewModel.Output) {
output
.data
.drive(questView.rx.items(cellIdentifier: QuestCell.reuseIdentifier, cellType: QuestCell.self)) { row, item, cell in
cell.setup(with: item)
}
cell.setup(with: item)
}
.disposed(by: disposableBag)

output
.data
.map({ !$0.isEmpty })
.drive(emptySpace.rx.isHidden)
.disposed(by: disposableBag)
}

private func bindToStatusBarProfileButton() {
statusView
.profileButtonDidClick
.bind(onNext: { [weak self] _ in
self?.coordinatorPublisher.onNext(.showProfileFlow)
})
self?.coordinatorPublisher.onNext(.showProfileFlow)
})
.disposed(by: disposableBag)
}
}

0 comments on commit 744fc6a

Please sign in to comment.