Skip to content

Commit

Permalink
fixes #135, fixes #136, fixes #137, fixes #138, fixes #139, fixes #140
Browse files Browse the repository at this point in the history
…fixes #141
  • Loading branch information
MrPeterss committed Apr 10, 2024
1 parent b18e02b commit 5615968
Show file tree
Hide file tree
Showing 9 changed files with 78 additions and 81 deletions.
76 changes: 21 additions & 55 deletions Eatery Blue/UI/CompareMenus/CompareMenusButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@ class CompareMenusButton: UIButton {

// MARK: - Properties (data)

private var buttonCallback: ((UIButton) -> Void)?
private var isCollapsed: Bool = true
private var largeButtonCallback: ((UIButton) -> Void)?
private var smallButtonCallback: ((UIButton) -> Void)?

// MARK: - Properties (view)

private let button = UIButton()
private let compareImageView = UIImageView()
private let textView = UILabel()

// MARK: - init
Expand All @@ -43,25 +42,21 @@ class CompareMenusButton: UIButton {
layer.shadowOffset = .zero
layer.shadowRadius = 2

addSubview(button)
setUpButton()
addSubview(compareImageView)
setUpCompareImageView()

addSubview(textView)
setUpTextView()

self.addTarget(self, action: #selector(largeButtonTouchUpInside), for: .touchUpInside)
self.addTarget(self, action: #selector(buttonTouchUpInside), for: .touchUpInside)
self.addTarget(self, action: #selector(buttonTouchDown), for: .touchDown)
self.addTarget(self, action: #selector(buttonTouchUpOutside), for: .touchUpOutside)
}

private func setUpButton() {
button.backgroundColor = UIColor.Eatery.blue
button.setImage(UIImage(named: "CompareMenus"), for: .normal)
button.layer.cornerRadius = 56 / 2

button.addTarget(self, action: #selector(smallButtonTouchUpInside), for: .touchUpInside)
button.addTarget(self, action: #selector(buttonTouchDown), for: .touchDown)
button.addTarget(self, action: #selector(buttonTouchUpOutside), for: .touchUpOutside)
private func setUpCompareImageView() {
compareImageView.backgroundColor = UIColor.Eatery.blue
compareImageView.image = UIImage(named: "CompareMenus")
compareImageView.layer.cornerRadius = 56 / 2
}

private func setUpTextView() {
Expand All @@ -77,53 +72,30 @@ class CompareMenusButton: UIButton {
make.size.equalTo(56)
}

button.snp.makeConstraints { make in
compareImageView.snp.makeConstraints { make in
make.size.equalTo(24)
make.leading.equalToSuperview().inset(16)
make.centerY.equalToSuperview()
}

textView.snp.makeConstraints { make in
make.leading.equalTo(button.snp.trailing).offset(12)
make.leading.equalTo(compareImageView.snp.trailing).offset(12)
make.centerY.equalToSuperview()
}
}

func smallButtonPress(_ callback: ((UIButton) -> Void)?) {
self.smallButtonCallback = callback
}

func largeButtonPress(_ callback: ((UIButton) -> Void)?) {
self.largeButtonCallback = callback
}

@objc private func smallButtonTouchUpInside(_ sender: UIButton) {
DispatchQueue.main.asyncAfter(deadline: .now()) { [weak self] in
guard let self else { return }

smallButtonCallback?(sender)
}

UIView.animate(withDuration: 0.15, delay: 0.15, options: .beginFromCurrentState) { [weak self] in
guard let self else { return }

if isCollapsed {
transform = .identity
} else {
sender.transform = .identity
}
}
func buttonPress(_ callback: ((UIButton) -> Void)?) {
self.buttonCallback = callback
}

@objc private func largeButtonTouchUpInside(_ sender: UIButton) {
if isCollapsed { return }
@objc private func buttonTouchUpInside(_ sender: UIButton) {
DispatchQueue.main.asyncAfter(deadline: .now()) { [weak self] in
guard let self else { return }

largeButtonCallback?(sender)
buttonCallback?(sender)
}

UIView.animate(withDuration: 0.15, delay: 0.15, options: .beginFromCurrentState) {
UIView.animate(withDuration: 0.15, delay: 0, options: .beginFromCurrentState) {
sender.transform = .identity
}
}
Expand All @@ -132,23 +104,16 @@ class CompareMenusButton: UIButton {
UIView.animate(withDuration: 0.15, delay: 0, options: .beginFromCurrentState) { [weak self] in
guard let self else { return }

if isCollapsed {
transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
} else {
sender.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
}
let transformPercentage = isCollapsed ? 0.9 : 0.95
transform = CGAffineTransform(scaleX: transformPercentage, y: transformPercentage)
}
}

@objc private func buttonTouchUpOutside(_ sender: UIButton) {
UIView.animate(withDuration: 0.15, delay: 0.15, options: .beginFromCurrentState) { [weak self] in
UIView.animate(withDuration: 0.15, delay: 0, options: .beginFromCurrentState) { [weak self] in
guard let self else { return }

if isCollapsed {
transform = .identity
} else {
sender.transform = .identity
}
transform = .identity
}
}

Expand All @@ -164,6 +129,7 @@ class CompareMenusButton: UIButton {

animate { [weak self] in
guard let self else { return }

textView.layer.opacity = 1
self.superview?.layoutIfNeeded()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,10 +344,10 @@ class CompareMenusEateryViewController: UIViewController {
if categoryViews.isEmpty {
categoryView.clipsToBounds = true
categoryView.layer.cornerRadius = 10
categoryView.layer.maskedCorners = [.layerMaxXMinYCorner, .layerMinXMinYCorner]
}

if isLast {
if !isLast {
categoryView.layer.maskedCorners = [.layerMaxXMinYCorner, .layerMinXMinYCorner]
}
} else if isLast {
categoryView.clipsToBounds = true
categoryView.layer.cornerRadius = 10
categoryView.layer.maskedCorners = [.layerMaxXMaxYCorner, .layerMinXMaxYCorner]
Expand Down
15 changes: 11 additions & 4 deletions Eatery Blue/UI/CompareMenus/CompareMenusFilterViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,17 @@ class CompareMenusFilterViewController: EateryFilterViewController {
super.viewDidLoad()

setUpSelected()
anyFilterTap { [weak self] in
guard let self else { return }

filter.selected = false
}

// Moving "Favorites" button to the 5th position.
filtersView.moveButton(from: 999, to: 4)
// "moveButton" handles out of binds index to bounds. Because "Favorites"
// button is always last, a large from will ensure this doesn't
// break if more filters are added
}

private func setUpSelected() {
Expand All @@ -40,10 +51,6 @@ class CompareMenusFilterViewController: EateryFilterViewController {
}

override func updateFilterButtonsFromState(animated: Bool) {
if filter.selected {
removeAllFilters()
}

super.updateFilterButtonsFromState(animated: animated)
selected.setHighlighted(filter.selected)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ class CompareMenusSheetViewController: SheetViewController {
compareNowButton.setTitle("Compare now", for: .normal)
compareNowButton.setTitleColor(UIColor(named: "Gray03"), for: .disabled)
compareNowButton.setTitleColor(.white, for: .normal)
compareNowButton.titleLabel?.font = .systemFont(ofSize: 18, weight: .semibold)

compareNowButton.backgroundColor = UIColor(named: "Gray00")
compareNowButton.isEnabled = false
Expand Down
5 changes: 3 additions & 2 deletions Eatery Blue/UI/CompareMenus/CompareMenusViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ class CompareMenusViewController: UIViewController {

override func viewDidLoad() {
view.backgroundColor = .white

view.clipsToBounds = true

addChild(pageController)
view.addSubview(pageController.view)

Expand Down Expand Up @@ -77,7 +78,7 @@ class CompareMenusViewController: UIViewController {
navigationController?.popViewController(animated: true)
let selectionViewController = CompareMenusSheetViewController(parentNavigationController: navigationController, allEateries: allEateries , selectedEateries: comparedEateries, selectedOn: true)
selectionViewController.setUpSheetPresentation()
navigationController?.present(selectionViewController, animated: true)
tabBarController?.present(selectionViewController, animated: true)
}
}

Expand Down
20 changes: 19 additions & 1 deletion Eatery Blue/UI/EateryFilter/EateryFilterViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ class EateryFilterViewController: UIViewController {
private let paymentMethods = PillFilterButtonView()
private let favorites = PillFilterButtonView()

private var allFiltersCallback: (() -> Void)?

var filter = EateryFilter()
let filtersView = PillFiltersView()

Expand Down Expand Up @@ -62,11 +64,13 @@ class EateryFilterViewController: UIViewController {
filtersView.addButton(favorites)
setUpFavorites()
}

private func setUpNorth() {
north.label.text = "North"
north.tap { [weak self] _ in
guard let self else { return }

allFiltersCallback?()
filter.north.toggle()
updateFilterButtonsFromState(animated: true)
delegate?.eateryFilterViewController(self, filterDidChange: filter)
Expand All @@ -80,6 +84,8 @@ class EateryFilterViewController: UIViewController {
west.label.text = "West"
west.tap { [weak self] _ in
guard let self else { return }

allFiltersCallback?()
filter.west.toggle()
updateFilterButtonsFromState(animated: true)
delegate?.eateryFilterViewController(self, filterDidChange: filter)
Expand All @@ -93,6 +99,8 @@ class EateryFilterViewController: UIViewController {
central.label.text = "Central"
central.tap { [weak self] _ in
guard let self else { return }

allFiltersCallback?()
filter.central.toggle()
updateFilterButtonsFromState(animated: true)
delegate?.eateryFilterViewController(self, filterDidChange: filter)
Expand All @@ -106,6 +114,8 @@ class EateryFilterViewController: UIViewController {
under10Minutes.label.text = "Under 10 min"
under10Minutes.tap { [weak self] _ in
guard let self else { return }

allFiltersCallback?()
filter.under10MinutesEnabled.toggle()
updateFilterButtonsFromState(animated: true)
delegate?.eateryFilterViewController(self, filterDidChange: filter)
Expand All @@ -120,6 +130,8 @@ class EateryFilterViewController: UIViewController {
paymentMethods.imageView.isHidden = false
paymentMethods.tap { [weak self] _ in
guard let self else { return }

allFiltersCallback?()
let viewController = PaymentMethodsFilterSheetViewController()
viewController.setUpSheetPresentation()
viewController.setSelectedPaymentMethods(filter.paymentMethods, animated: false)
Expand All @@ -136,6 +148,8 @@ class EateryFilterViewController: UIViewController {
favorites.label.text = "Favorites"
favorites.tap { [weak self] _ in
guard let self else { return }

allFiltersCallback?()
filter.favoriteEnabled.toggle()
updateFilterButtonsFromState(animated: true)
delegate?.eateryFilterViewController(self, filterDidChange: filter)
Expand All @@ -145,6 +159,10 @@ class EateryFilterViewController: UIViewController {
}
}

func anyFilterTap(_ callback: (() -> Void)?) {
self.allFiltersCallback = callback
}

private func setUpConstraints() {
filtersView.snp.makeConstraints { make in
make.edges.equalToSuperview()
Expand Down
13 changes: 12 additions & 1 deletion Eatery Blue/UI/EateryFilter/PillFiltersView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,16 @@ class PillFiltersView: UIView {
func addButton(_ buttonView: PillFilterButtonView, at: Int) {
stackView.insertArrangedSubview(buttonView, at: at)
}


func moveButton(from: Int, to: Int) {
var boundedFrom = max(min(from, stackView.arrangedSubviews.count - 1), 0)
var boundedTo = max(min(to, stackView.arrangedSubviews.count - 1), 0)
let movedView = stackView.arrangedSubviews[boundedFrom]
stackView.arrangedSubviews[boundedFrom].removeFromSuperview()
if boundedTo >= stackView.arrangedSubviews.count {
stackView.addArrangedSubview(movedView)
} else {
stackView.insertArrangedSubview(movedView, at: boundedTo)
}
}
}
8 changes: 2 additions & 6 deletions Eatery Blue/UI/EateryScreen/EateryModelController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -114,17 +114,13 @@ class EateryModelController: EateryViewController {
}

private func setUpCompareMenusButton() {
compareMenusButton.largeButtonPress { [weak self] _ in
compareMenusButton.buttonPress { [weak self] _ in
guard let self, let eatery else { return }

let viewController = CompareMenusSheetViewController(parentNavigationController: navigationController, allEateries: allEateries, selectedEateries: [eatery])
viewController.setUpSheetPresentation()
tabBarController?.present(viewController, animated: true)
}

compareMenusButton.smallButtonPress { [weak self] _ in
guard let self else { return }
compareMenusButton.toggle()
}
}

private func addButtons(_ eatery: Eatery) {
Expand Down
13 changes: 5 additions & 8 deletions Eatery Blue/UI/HomeScreen/HomeModelController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,9 @@ class HomeModelController: HomeViewController {

compareMenusOnboarding.compareMenusButton.tap { [weak self] _ in
guard let self else { return }
compareMenusOnboarding.dismiss()
compareMenusButton.expand()
let viewController = CompareMenusSheetViewController(parentNavigationController: navigationController, allEateries: allEateries, selectedEateries: [])
viewController.setUpSheetPresentation()
tabBarController?.present(viewController, animated: true)
}
}

Expand Down Expand Up @@ -111,17 +112,13 @@ class HomeModelController: HomeViewController {
}

private func setUpCompareMenusButton() {
compareMenusButton.largeButtonPress { [weak self] _ in
compareMenusButton.buttonPress { [weak self] _ in
guard let self else { return }

let viewController = CompareMenusSheetViewController(parentNavigationController: navigationController, allEateries: allEateries, selectedEateries: [])
viewController.setUpSheetPresentation()
tabBarController?.present(viewController, animated: true)
}

compareMenusButton.smallButtonPress { [weak self] _ in
guard let self else { return }
compareMenusButton.toggle()
}
}

private func setUpUserLocationSubscription() {
Expand Down

0 comments on commit 5615968

Please sign in to comment.