Skip to content

Commit 6411025

Browse files
committed
[#198] MenuFeedbackView UI 및 토글 이벤트 구현
1 parent d5127ee commit 6411025

File tree

2 files changed

+158
-2
lines changed

2 files changed

+158
-2
lines changed

EATSSU/App/Sources/Presentation/Review/MainReviewView/Component/MenuChipHorizontalScrollView.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class MenuChipHorizontalScrollView: BaseUIView {
7474
config.background.strokeColor = EATSSUDesignAsset.Color.Main.primary.color
7575
config.background.strokeWidth = 0.5
7676

77-
config.image = EATSSUDesignAsset.Images.thumbUp.image
77+
config.image = EATSSUDesignAsset.Images.filledThumbUp.image
7878
config.imagePadding = 1
7979
config.cornerStyle = .capsule
8080
config.contentInsets = NSDirectionalEdgeInsets(top: 5, leading: 6, bottom: 5, trailing: 6)

EATSSU/App/Sources/Presentation/Review/MainReviewView/WritingReview/MenuFeedbackView.swift

+157-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,160 @@
55
// Created by 최지우 on 2/13/25.
66
//
77

8-
import Foundation
8+
import UIKit
9+
10+
import SnapKit
11+
import EATSSUDesign
12+
13+
enum FeedbackType {
14+
case like
15+
case dislike
16+
case none
17+
}
18+
19+
class MenuFeedbackView: UIView {
20+
21+
// MARK: - Properties
22+
23+
private var selectedFeedback: FeedbackType = .none {
24+
didSet {
25+
updateButtonStates()
26+
}
27+
}
28+
29+
// MARK: - UI Components
30+
31+
private let menuLabel = UILabel()
32+
private lazy var likeButton = UIButton()
33+
private lazy var dislikeButton = UIButton()
34+
private lazy var buttonStackView = UIStackView()
35+
private lazy var menuStackView = UIStackView()
36+
37+
// MARK: - Functions
38+
39+
override init(frame: CGRect) {
40+
super.init(frame: frame)
41+
42+
configureUI()
43+
setLayout()
44+
setProperties()
45+
}
46+
47+
required init?(coder: NSCoder) {
48+
super.init(coder: coder)
49+
50+
configureUI()
51+
setLayout()
52+
setProperties()
53+
}
54+
55+
private func updateButtonStates() {
56+
switch selectedFeedback {
57+
case .like:
58+
likeButton.configuration?.image = EATSSUDesignAsset.Images.filledThumbUp.image
59+
dislikeButton.configuration?.image = EATSSUDesignAsset.Images.unfilledThumbDown.image
60+
61+
likeButton.configuration?.background.strokeColor = EATSSUDesignAsset.Color.Main.primary.color
62+
likeButton.configuration?.background.backgroundColor = EATSSUDesignAsset.Color.Main.secondary.color
63+
64+
dislikeButton.configuration?.background.strokeColor = EATSSUDesignAsset.Color.GrayScale.gray300.color
65+
dislikeButton.configuration?.background.backgroundColor = .white
66+
case .dislike:
67+
likeButton.configuration?.image = EATSSUDesignAsset.Images.unfilledThumbUp.image
68+
dislikeButton.configuration?.image = EATSSUDesignAsset.Images.filledThumbDown.image
69+
70+
dislikeButton.configuration?.background.strokeColor = EATSSUDesignAsset.Color.Main.primary.color
71+
dislikeButton.configuration?.background.backgroundColor = EATSSUDesignAsset.Color.Main.secondary.color
72+
73+
likeButton.configuration?.background.strokeColor = EATSSUDesignAsset.Color.GrayScale.gray300.color
74+
likeButton.configuration?.background.backgroundColor = .white
75+
case .none:
76+
likeButton.configuration?.background.backgroundColor = .white
77+
dislikeButton.configuration?.background.backgroundColor = .white
78+
}
79+
}
80+
81+
@objc
82+
func likeButtonTapped() {
83+
selectedFeedback = .like
84+
}
85+
86+
@objc
87+
private func dislikeButtonTapped() {
88+
selectedFeedback = .dislike
89+
}
90+
91+
public func configure(with menuName: String) {
92+
menuLabel.text = menuName
93+
}
94+
95+
}
96+
97+
extension MenuFeedbackView {
98+
private func configureUI() {
99+
buttonStackView.addArrangedSubviews([
100+
likeButton,
101+
dislikeButton
102+
])
103+
menuStackView.addArrangedSubviews([
104+
menuLabel,
105+
buttonStackView
106+
])
107+
addSubviews(
108+
menuStackView
109+
)
110+
}
111+
112+
private func setLayout() {
113+
menuStackView.snp.makeConstraints { make in
114+
make.top.horizontalEdges.equalToSuperview()
115+
make.height.equalTo(28)
116+
}
117+
[likeButton, dislikeButton].forEach { button in
118+
button.snp.makeConstraints { make in
119+
make.width.equalTo(58)
120+
make.height.equalTo(28)
121+
}
122+
}
123+
}
124+
125+
private func setProperties() {
126+
menuLabel.do {
127+
$0.font = EATSSUDesignFontFamily.Pretendard.regular.font(size: 14)
128+
}
129+
likeButton.do {
130+
var config = UIButton.Configuration.plain()
131+
config.image = EATSSUDesignAsset.Images.unfilledThumbUp.image
132+
config.background.strokeColor = EATSSUDesignAsset.Color.GrayScale.gray300.color
133+
config.background.strokeWidth = 1
134+
config.background.cornerRadius = 15
135+
$0.configuration = config
136+
$0.addAction(UIAction(handler: { [weak self] _ in
137+
self?.likeButtonTapped()
138+
}), for: .touchUpInside)
139+
}
140+
dislikeButton.do {
141+
var config = UIButton.Configuration.plain()
142+
config.image = EATSSUDesignAsset.Images.unfilledThumbDown.image
143+
config.background.strokeColor = EATSSUDesignAsset.Color.GrayScale.gray300.color
144+
config.background.strokeWidth = 1
145+
config.background.cornerRadius = 15
146+
$0.configuration = config
147+
$0.addAction(UIAction(handler: { [weak self] _ in
148+
self?.dislikeButtonTapped()
149+
}), for: .touchUpInside)
150+
}
151+
buttonStackView.do {
152+
$0.axis = .horizontal
153+
$0.spacing = 8
154+
$0.distribution = .fillEqually
155+
$0.clipsToBounds = false
156+
$0.isUserInteractionEnabled = true
157+
}
158+
menuStackView.do {
159+
$0.axis = .horizontal
160+
$0.spacing = 4
161+
$0.distribution = .fill
162+
}
163+
}
164+
}

0 commit comments

Comments
 (0)