Skip to content

Commit

Permalink
Merge pull request #135 from EAT-SSU/fix/#56
Browse files Browse the repository at this point in the history
[Fix] 리뷰 μž‘μ„± μ—λŸ¬ ν•΄κ²°
  • Loading branch information
jayn2u authored Sep 27, 2024
2 parents 8f9378e + 03f9435 commit 0006d55
Show file tree
Hide file tree
Showing 4 changed files with 137 additions and 87 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ final class RateView: BaseUIView {
// MARK: - Functions

override func configureUI() {
super.configureUI()
self.addSubview(starStackView)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,10 @@ final class ChoiceMenuViewController: BaseViewController {
view.showToast(message: "리뷰λ₯Ό μž‘μ„±ν•  메뉴λ₯Ό μ„ νƒν•΄μ£Όμ„Έμš”!")
} else {
let setRateVC = SetRateViewController()
setRateVC.dataBind(list: self.selectedList, idList: selectedIDList)
setRateVC.dataBind(list: self.selectedList,
idList: selectedIDList,
reviewList: nil,
currentPage: 0)
self.navigationController?.pushViewController(setRateVC, animated: true)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,8 @@ final class ReviewViewController: BaseViewController {
@objc
func refreshTable(refresh: UIRefreshControl) {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.reviewTableView.reloadData()
self.getReviewRate()
self.getReviewList(type: self.type, menuId: self.menuID)
refresh.endRefreshing()
}
}
Expand Down Expand Up @@ -191,14 +192,20 @@ final class ReviewViewController: BaseViewController {
if menuIDList == nil {
let setRateViewController = SetRateViewController()
menuIDList = [menuID]
setRateViewController.dataBind(list: menuNameList, idList: menuIDList ?? [])
setRateViewController.dataBind(list: menuNameList,
idList: menuIDList ?? [],
reviewList: nil,
currentPage: 0)
self.activityIndicatorView.stopAnimating()
self.navigationController?.pushViewController(setRateViewController, animated: true)
} else {
// 고정메뉴이고, 메뉴가 1κ°œμΌλ•Œ μ„ νƒμ°½μœΌλ‘œ μ•ˆκ°€κ³  λ°”λ‘œ μž‘μ„±μ°½μœΌλ‘œ 가도둝
if menuIDList?.count == 1 {
let setRateViewController = SetRateViewController()
setRateViewController.dataBind(list: menuNameList, idList: menuIDList ?? [])
setRateViewController.dataBind(list: menuNameList,
idList: menuIDList ?? [],
reviewList: nil,
currentPage: 0)
self.activityIndicatorView.stopAnimating()
self.navigationController?.pushViewController(setRateViewController, animated: true)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,29 @@ import SnapKit
import Then
import Moya

final class SetRateViewController: BaseViewController, UINavigationControllerDelegate {
final class SetRateViewController: BaseViewController {

// MARK: - Properties

private let writeReviewProvider = MoyaProvider<WriteReviewRouter>(plugins: [MoyaLoggingPlugin()])
private let reviewProvider = MoyaProvider<ReviewRouter>(plugins: [MoyaLoggingPlugin()])
private var userPickedImage: UIImage?
private var selectedIDList: [Int] = []
private var lastID: Int = Int()
private var reviewId: Int?
private var selectedList: [String] = [] {
private var currentPage: Int = 0 {
didSet {
menuLabel.text = "\(selectedList[0]) 을/λ₯Ό μΆ”μ²œν•˜μ‹œκ² μ–΄μš”?"
if selectedList.count == 1 {
menuLabel.text = "\(selectedList[currentPage]) 을/λ₯Ό μΆ”μ²œν•˜μ‹œκ² μ–΄μš”?"
if currentPage == selectedList.count - 1 {
self.nextButton.setTitle("리뷰 남기기", for: .normal)
}
}
}
private var userPickedImage: UIImage?
private var reviewList: [(BeforeSelectedImageDTO, UIImage?)] = []
private var selectedIDList: [Int] = []
private var selectedList: [String] = []


/// [리뷰 μˆ˜μ •ν•˜κΈ°]에 ν•„μš”ν•œ reviewID
/// ν•΄λ‹Ή 값이 μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄, 리뷰 μž‘μ„±ν•˜κΈ° κΈ°λŠ₯을 μˆ˜ν–‰ 쀑인 것이닀
private var reviewId: Int?

// MARK: - UI Components

Expand Down Expand Up @@ -287,15 +292,25 @@ final class SetRateViewController: BaseViewController, UINavigationControllerDel
}
}

func dataBind(list: [String], idList: [Int]) {
func dataBind(list: [String], idList: [Int], reviewList: [(BeforeSelectedImageDTO, UIImage?)]?, currentPage: Int) {
self.selectedList = list
self.selectedIDList = idList
self.lastID = idList.last ?? 0
if let reviewList = reviewList {
self.reviewList = reviewList
} else {
self.reviewList = Array(repeating: (BeforeSelectedImageDTO(mainRating: 0,
amountRating: 0,
tasteRating: 0,
content: ""),
nil), count: idList.count)
}
self.currentPage = currentPage
}

func dataBindForFix(list: [String], reivewId: Int) {
self.selectedList = list
self.reviewId = reivewId
menuLabel.text = "\(selectedList[0]) 을/λ₯Ό μΆ”μ²œν•˜μ‹œκ² μ–΄μš”?"
selectImageButton.isHidden = true
deleteMethodLabel.isHidden = true
nextButton.setTitle("리뷰 μˆ˜μ • μ™„λ£Œν•˜κΈ°", for: .normal)
Expand All @@ -309,8 +324,6 @@ final class SetRateViewController: BaseViewController, UINavigationControllerDel
userReviewTextView.delegate = self
}

// FIXME: - alert μΆ”κ°€

@objc
func tappedNextButton() {

Expand All @@ -319,31 +332,28 @@ final class SetRateViewController: BaseViewController, UINavigationControllerDel
} else {

if (rateView.currentStar != 0) && (quantityRateView.currentStar != 0) && (tasteRateView.currentStar != 0) {
// 리뷰 μž‘μ„±ν•˜κΈ° λ²„νŠΌμ΄ isEnabled = true일 λ•Œμ˜ area
let param = BeforeSelectedImageDTO.init(mainRating: rateView.currentStar,
amountRating: quantityRateView.currentStar,
tasteRating: tasteRateView.currentStar,
content: userReviewTextView.text
)
amountRating: quantityRateView.currentStar,
tasteRating: tasteRateView.currentStar,
content: userReviewTextView.text
)

/// 리뷰 λ°μ΄ν„°λŠ” ν˜„μž¬ νŽ˜μ΄μ§€κ°€ μ–΄λ””λ“  상관 없이 μ €μž₯λ˜μ–΄μ•Ό 함
// reviewList[currentPage] = (param, userPickedImage)

switch reviewId {
case .none:
if selectedList.count == 1 {
self.navigationController?.isNavigationBarHidden = false
}

if userPickedImage != nil {
postReviewImage(param: param,
image: userPickedImage,
menuId: selectedIDList[0])
/// ν˜„μž¬ νŽ˜μ΄μ§€κ°€ λ§ˆμ§€λ§‰ 메뉴에 λŒ€ν•œ λ¦¬λ·°νŽ˜μ΄μ§€μΌ λ•Œμ˜ μ•‘μ…˜
reviewList[currentPage] = (param, userPickedImage)
if currentPage == selectedList.count - 1 {
self.navigationController?.isNavigationBarHidden = false
sendDataIfCurrentPageIsLast()
} else {
let reviewDTO = WriteReviewRequest(content: param, imageURL: "")
postNewWriteReview(param: reviewDTO,
menuID: selectedIDList[0])
prepareForNextReview()
}

// postWriteReview(param: param,
// image: [userPickedImage],
// menuId: selectedIDList[0]
// )

case .some(let reviewID):
patchFixedReview(reviewId: reviewID, param: param)
}
Expand All @@ -354,55 +364,22 @@ final class SetRateViewController: BaseViewController, UINavigationControllerDel
}
}

// ν‚€λ³΄λ“œκ°€ λ‚˜νƒ€λ‚¬λ‹€λŠ” μ•Œλ¦Όμ„ λ°›μœΌλ©΄ μ‹€ν–‰ν•  λ©”μ„œλ“œ
@objc
func keyboardWillShow(_ noti: NSNotification) {
// ν‚€λ³΄λ“œμ˜ λ†’μ΄λ§ŒνΌ 화면을 μ˜¬λ €μ€€λ‹€.
if let keyboardFrame: NSValue = noti.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRectangle = keyboardFrame.cgRectValue
UIView.animate(
withDuration: 0.3,
animations: {
self.view.transform = CGAffineTransform(translationX: 0, y: -keyboardRectangle.height)
self.navigationController?.isNavigationBarHidden = true
}
)
private func sendDataIfCurrentPageIsLast() {
for (index, review) in reviewList.enumerated() {
let (reviewDTO, image) = review
if image != nil {
postReviewImage(param: reviewDTO,
image: image,
menuId: selectedIDList[index])
} else {
let reviewDTO = WriteReviewRequest(content: reviewDTO, imageURL: "")
postNewWriteReview(param: reviewDTO,
menuID: selectedIDList[index])
}
}
}

// ν‚€λ³΄λ“œκ°€ μ‚¬λΌμ‘Œλ‹€λŠ” μ•Œλ¦Όμ„ λ°›μœΌλ©΄ μ‹€ν–‰ν•  λ©”μ„œλ“œ
@objc
func keyboardWillHide(_ noti: NSNotification) {
self.view.transform = .identity
self.navigationController?.isNavigationBarHidden = false
}

// λ…Έν‹°ν”ΌμΌ€μ΄μ…˜μ„ μΆ”κ°€ν•˜λŠ” λ©”μ„œλ“œ
func addKeyboardNotifications() {
// ν‚€λ³΄λ“œκ°€ λ‚˜νƒ€λ‚  λ•Œ μ•±μ—κ²Œ μ•Œλ¦¬λŠ” λ©”μ„œλ“œ μΆ”κ°€
NotificationCenter.default.addObserver(self,
selector: #selector(self.keyboardWillShow(_:)),
name: UIResponder.keyboardWillShowNotification,
object: nil)
// ν‚€λ³΄λ“œκ°€ μ‚¬λΌμ§ˆ λ•Œ μ•±μ—κ²Œ μ•Œλ¦¬λŠ” λ©”μ„œλ“œ μΆ”κ°€
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)),
name: UIResponder.keyboardWillHideNotification,
object: nil)
}

// λ…Έν‹°ν”ΌμΌ€μ΄μ…˜μ„ μ œκ±°ν•˜λŠ” λ©”μ„œλ“œ
func removeKeyboardNotifications() {
// ν‚€λ³΄λ“œκ°€ λ‚˜νƒ€λ‚  λ•Œ μ•±μ—κ²Œ μ•Œλ¦¬λŠ” λ©”μ„œλ“œ 제거
NotificationCenter.default.removeObserver(self,
name: UIResponder.keyboardWillShowNotification,
object: nil)
// ν‚€λ³΄λ“œκ°€ μ‚¬λΌμ§ˆ λ•Œ μ•±μ—κ²Œ μ•Œλ¦¬λŠ” λ©”μ„œλ“œ 제거
NotificationCenter.default.removeObserver(self,
name: UIResponder.keyboardWillHideNotification,
object: nil)
}

// imagePicker
@objc
func didSelectedImage() {
self.present(imagePickerController, animated: true, completion: nil)
Expand All @@ -415,13 +392,15 @@ final class SetRateViewController: BaseViewController, UINavigationControllerDel
}

private func prepareForNextReview() {
selectedList.remove(at: 0)
selectedIDList.remove(at: 0)
let setRateVC = SetRateViewController()
setRateVC.dataBind(list: selectedList, idList: selectedIDList)
setRateVC.dataBind(list: selectedList,
idList: selectedIDList,
reviewList: reviewList,
currentPage: currentPage + 1)
navigationController?.pushViewController(setRateVC, animated: true)
}

// 리뷰 리슀트 λ³΄λŠ” ν™”λ©΄μœΌλ‘œ λ„˜μ–΄κ°€λ„λ‘ ν•˜λŠ” ν•¨μˆ˜
private func moveToReviewVC() {
if let reviewViewController = self.navigationController?.viewControllers.first(where: { $0 is ReviewViewController }) {
self.navigationController?.popToViewController(reviewViewController, animated: true)
Expand Down Expand Up @@ -479,10 +458,8 @@ extension SetRateViewController {
switch response {
case .success(_):
do {
if self.selectedList.count == 1 {
if self.currentPage == self.reviewList.count - 1 {
self.moveToReviewVC()
} else {
self.prepareForNextReview()
}
}

Expand Down Expand Up @@ -527,6 +504,8 @@ extension SetRateViewController {
}
}

// MARK: - UIImagePickerControllerDelegate

extension SetRateViewController: UIImagePickerControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
Expand All @@ -537,6 +516,8 @@ extension SetRateViewController: UIImagePickerControllerDelegate {
}
}

// MARK: - UITextViewDelegate

extension SetRateViewController: UITextViewDelegate {

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
Expand All @@ -562,3 +543,63 @@ extension SetRateViewController: UITextViewDelegate {
}
}
}

// MARK: - UINavigationControllerDelegate

extension SetRateViewController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
if viewController == self {
// Pop 되기 μ§μ „μ˜ λ‘œμ§μ„ μ—¬κΈ°μ„œ μ‹€ν–‰
print("Back button pressed, will pop the current view controller")
}
}

// ν‚€λ³΄λ“œκ°€ λ‚˜νƒ€λ‚¬λ‹€λŠ” μ•Œλ¦Όμ„ λ°›μœΌλ©΄ μ‹€ν–‰ν•  λ©”μ„œλ“œ
@objc
func keyboardWillShow(_ noti: NSNotification) {
// ν‚€λ³΄λ“œμ˜ λ†’μ΄λ§ŒνΌ 화면을 μ˜¬λ €μ€€λ‹€.
if let keyboardFrame: NSValue = noti.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRectangle = keyboardFrame.cgRectValue
UIView.animate(
withDuration: 0.3,
animations: {
self.view.transform = CGAffineTransform(translationX: 0, y: -keyboardRectangle.height)
self.navigationController?.isNavigationBarHidden = true
}
)
}
}

// ν‚€λ³΄λ“œκ°€ μ‚¬λΌμ‘Œλ‹€λŠ” μ•Œλ¦Όμ„ λ°›μœΌλ©΄ μ‹€ν–‰ν•  λ©”μ„œλ“œ
@objc
func keyboardWillHide(_ noti: NSNotification) {
self.view.transform = .identity
self.navigationController?.isNavigationBarHidden = false
}

// λ…Έν‹°ν”ΌμΌ€μ΄μ…˜μ„ μΆ”κ°€ν•˜λŠ” λ©”μ„œλ“œ
func addKeyboardNotifications() {
// ν‚€λ³΄λ“œκ°€ λ‚˜νƒ€λ‚  λ•Œ μ•±μ—κ²Œ μ•Œλ¦¬λŠ” λ©”μ„œλ“œ μΆ”κ°€
NotificationCenter.default.addObserver(self,
selector: #selector(self.keyboardWillShow(_:)),
name: UIResponder.keyboardWillShowNotification,
object: nil)
// ν‚€λ³΄λ“œκ°€ μ‚¬λΌμ§ˆ λ•Œ μ•±μ—κ²Œ μ•Œλ¦¬λŠ” λ©”μ„œλ“œ μΆ”κ°€
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)),
name: UIResponder.keyboardWillHideNotification,
object: nil)
}

// λ…Έν‹°ν”ΌμΌ€μ΄μ…˜μ„ μ œκ±°ν•˜λŠ” λ©”μ„œλ“œ
func removeKeyboardNotifications() {
// ν‚€λ³΄λ“œκ°€ λ‚˜νƒ€λ‚  λ•Œ μ•±μ—κ²Œ μ•Œλ¦¬λŠ” λ©”μ„œλ“œ 제거
NotificationCenter.default.removeObserver(self,
name: UIResponder.keyboardWillShowNotification,
object: nil)
// ν‚€λ³΄λ“œκ°€ μ‚¬λΌμ§ˆ λ•Œ μ•±μ—κ²Œ μ•Œλ¦¬λŠ” λ©”μ„œλ“œ 제거
NotificationCenter.default.removeObserver(self,
name: UIResponder.keyboardWillHideNotification,
object: nil)
}

}

0 comments on commit 0006d55

Please sign in to comment.