Skip to content
Merged
12 changes: 6 additions & 6 deletions DE/DE/Sources/Core/CommonUI/View/CustomTextFieldView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,7 @@ public class CustomTextFieldView: UIView, UITextFieldDelegate {
textFieldPlaceholder: String, validationText: String) {

// 설명 라벨 설정
descriptionLabel.text = descriptionLabelText
descriptionLabel.textColor = AppColor.black
descriptionLabel.font = UIFont.pretendard(.semiBold, size: 18)
AppTextStyle.KR.subtitle1.apply(to: descriptionLabel, text: descriptionLabelText, color: AppColor.black)

// 텍스트 필드 설정
textField.placeholder = textFieldPlaceholder
Expand Down Expand Up @@ -85,16 +83,18 @@ public class CustomTextFieldView: UIView, UITextFieldDelegate {

descriptionLabel.snp.makeConstraints { make in
make.top.equalToSuperview()
make.leading.equalToSuperview().offset(8)
make.leading.equalToSuperview()
}

textField.snp.makeConstraints { make in
make.top.equalTo(descriptionLabel.snp.bottom).offset(10)
make.top.equalTo(descriptionLabel.snp.bottom).offset(20)
make.leading.trailing.bottom.equalToSuperview()
make.height.equalTo(DynamicPadding.dynamicValue(48.0))
}

validationLabel.snp.makeConstraints { make in
make.top.equalTo(textField.snp.bottom).offset(5)
make.leading.equalToSuperview().inset(8)
make.leading.equalToSuperview().inset(4)
}
}

Expand Down
12 changes: 12 additions & 0 deletions DE/DE/Sources/Features/Setting/Models/MyWineViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,16 @@ public struct MyWineViewModel {
let components = Calendar.current.dateComponents([.year, .month, .day], from: date)
return components
}

public func getVintage() -> Int? {
return vintage
}

public func getDisplayedName() -> String {
if let vintage = vintage {
return "\(wineName) \(vintage)"
} else {
return wineName
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ import SnapKit
import Then
// 보유와인 정보 수정

class ChangeMyOwnedWineViewController: UIViewController, FirebaseTrackable {
final class ChangeMyOwnedWineViewController: UIViewController, FirebaseTrackable {
var screenName: String = Tracking.VC.updateMyWineVC

weak var delegate: ChildViewControllerDelegate?

let navigationBarManager = NavigationBarManager()
lazy var editInfoView = ChangeMyOwnedWineView()
lazy var editInfoView = ChangeMyWineView()

let networkService = MyWineService()
private let errorHandler = NetworkErrorHandler()
Expand All @@ -34,6 +34,8 @@ class ChangeMyOwnedWineViewController: UIViewController, FirebaseTrackable {
super.viewWillAppear(animated)
self.view.addSubview(indicator)
self.navigationController?.setNavigationBarHidden(false, animated: animated)

setData()
}

public override func viewWillDisappear(_ animated: Bool) {
Expand All @@ -59,17 +61,50 @@ class ChangeMyOwnedWineViewController: UIViewController, FirebaseTrackable {
configureCalendarSelection()
editInfoView.priceTextField.textField.addTarget(self, action: #selector(checkEmpty), for: .allEditingEvents)
editInfoView.nextButton.addTarget(self, action: #selector(completeEdit), for: .touchUpInside)

editInfoView.yearPicker.onLabelTapped = { [weak self] in
guard let self else { return }

let modal = YearPickerModalViewController(
minYear: self.editInfoView.yearPicker.minYear,
maxYear: self.editInfoView.yearPicker.maxYear,
selectedYear: self.editInfoView.yearPicker.selectedYear
)

modal.onYearConfirmed = { [weak self] selectedYear in
self?.editInfoView.yearPicker.setSelectedYear(selectedYear)
self?.editInfoView.yearPicker.updatePickerView(isModalOpen: false)
}

modal.modalPresentationStyle = .pageSheet
if let sheet = modal.sheetPresentationController {
sheet.detents = [.medium()]
sheet.prefersGrabberVisible = true
sheet.prefersScrollingExpandsWhenScrolledToEdge = false
}

modal.presentationController?.delegate = self

self.editInfoView.yearPicker.updatePickerView(isModalOpen: true)
self.present(modal, animated: true)
}
}

func setupUI() {
guard let wine = registerWine else {return}
func setData() {
guard let wine = registerWine else { return }
guard let vintage = wine.getVintage() else { return }

editInfoView.setTopSection(name: wine.wineName)
editInfoView.yearPicker.setInitalYear(vintage)
editInfoView.setWinePrice(wine.purchasePrice)

}

func setupUI() {
view.addSubview(editInfoView)
editInfoView.snp.makeConstraints { make in
make.top.equalTo(view.safeAreaLayoutGuide).offset(DynamicPadding.dynamicValue(40))
make.leading.trailing.equalToSuperview().inset(DynamicPadding.dynamicValue(24))
make.top.equalTo(view.safeAreaLayoutGuide)

make.leading.trailing.equalToSuperview()
make.bottom.equalToSuperview()
}
}
Expand Down Expand Up @@ -111,10 +146,11 @@ class ChangeMyOwnedWineViewController: UIViewController, FirebaseTrackable {
@objc private func deleteNewWine() {

guard let currentWine = self.registerWine else { return }
guard let vintage = currentWine.getVintage() else { return }

let alert = UIAlertController(
title: "이 와인을 삭제하시겠습니까?",
message: "\(currentWine.wineName)",
message: "\(currentWine.wineName) \(vintage)",
preferredStyle: .alert
)

Expand All @@ -136,12 +172,25 @@ class ChangeMyOwnedWineViewController: UIViewController, FirebaseTrackable {
@objc
private func completeEdit() {
logButtonClick(screenName: screenName, buttonName: Tracking.ButtonEvent.updatemyWineBtnTapped, fileName: #file)

guard let wine = registerWine else { return }
callUpdateAPI(wineId: wine.myWineId, price: checkPrice(), buyDate: checkDate())
DispatchQueue.main.async {
self.view.hideBlockingView()
self.navigationController?.popViewController(animated: true)
guard let selectedVintage = editInfoView.yearPicker.selectedYear else {
showToastMessage(message: "빈티지가 선택되지 않았습니다.", yPosition: view.frame.height * 0.5)
return
}

callUpdateAPI(
wineId: wine.myWineId,
price: checkPrice(),
vintage: selectedVintage,
buyDate: checkDate()
)

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { [weak self] in
self?.view.hideBlockingView()
self?.navigationController?.popViewController(animated: true)
}

}

@objc func checkEmpty() {
Expand Down Expand Up @@ -193,8 +242,13 @@ class ChangeMyOwnedWineViewController: UIViewController, FirebaseTrackable {
}
}

private func callUpdateAPI(wineId: Int, price: Int?, buyDate: String?) {
let data = networkService.makeUpdateDTO(buyDate: buyDate, buyPrice: price)
private func callUpdateAPI(wineId: Int, price: Int?, vintage: Int?, buyDate: String?) {
let data = networkService.makeUpdateDTO(
buyDate: buyDate,
vintage: vintage,
buyPrice: price
)

self.view.showBlockingView()
Task {
do {
Expand Down Expand Up @@ -243,3 +297,9 @@ extension ChangeMyOwnedWineViewController: UICalendarViewDelegate {
return nil
}
}

extension ChangeMyOwnedWineViewController: UIAdaptivePresentationControllerDelegate {
public func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
editInfoView.yearPicker.updatePickerView(isModalOpen: false)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public class MyOwnedWineInfoViewController: UIViewController, ChildViewControlle

public override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
fetchMyWineAPI()
self.view.addSubview(indicator)
self.hidesBottomBarWhenPushed = true
self.navigationController?.setNavigationBarHidden(false, animated: animated)
Expand All @@ -41,32 +42,30 @@ public class MyOwnedWineInfoViewController: UIViewController, ChildViewControlle
super.viewDidLoad()
setupUI()
setupNavigationBar()
setWineData()
setActions()
wineDetailView.setEditButton(showEditButton: true)
}

public override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
logScreenView(fileName: #file)
fetchMyWineAPI()
}

private func setActions() {
wineDetailView.editButton.addTarget(self, action: #selector(editButtonTapped), for: .touchUpInside)
deleteButton.addTarget(self, action: #selector(deleteButtonTapped), for: .touchUpInside)
}

@MainActor
private func setWineData() {
guard let currentWine = self.registerWine else { return }
var displayName = currentWine.wineName
if let vintage = currentWine.vintage {
displayName += " \(vintage)"
}

header.setWineName(displayName)
header.setWineName(currentWine.getDisplayedName())
header.infoView.image.sd_setImage(with: URL(string: currentWine.wineImageUrl), placeholderImage: UIImage(named: "placeholder"))
header.infoView.typeContents.text = "\(currentWine.wineCountry), \(currentWine.wineRegion)"
header.infoView.countryContents.text = currentWine.wineVariety
header.infoView.kindContents.text = currentWine.wineSort

self.setWineDetailInfo(currentWine)
wineDetailView.editButton.addTarget(self, action: #selector(editButtonTapped), for: .touchUpInside)
deleteButton.addTarget(self, action: #selector(deleteButtonTapped), for: .touchUpInside)
}

// MARK: - Setup Methods
Expand Down Expand Up @@ -177,28 +176,34 @@ public class MyOwnedWineInfoViewController: UIViewController, ChildViewControlle
Task {
do {
let data = try await networkService.fetchMyWine(myWineId: registerWine!.myWineId)
DispatchQueue.main.async { [self] in
self.registerWine = MyWineViewModel(
myWineId: data.myWineId,
wineId: data.wineId,
wineName: data.wineName,
vintage: data.vintageYear,
wineSort: data.wineSort,
wineCountry: data.wineCountry,
wineRegion: data.wineRegion,
wineVariety: data.wineVariety,
wineImageUrl: data.wineImageUrl,
purchaseDate: data.purchaseDate,
purchasePrice: data.purchasePrice,
period: data.period
)

registerWine = MyWineViewModel(
myWineId: data.myWineId,
wineId: data.wineId,
wineName: data.wineName,
vintage: data.vintageYear,
wineSort: data.wineSort,
wineCountry: data.wineCountry,
wineRegion: data.wineRegion,
wineVariety: data.wineVariety,
wineImageUrl: data.wineImageUrl,
purchaseDate: data.purchaseDate,
purchasePrice: data.purchasePrice,
period: data.period
)

DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
self.setWineData()
// self.needUpdate = false

self.view.hideBlockingView()
}
} catch {
self.view.hideBlockingView()
errorHandler.handleNetworkError(error, in: self)
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
self.view.hideBlockingView()
errorHandler.handleNetworkError(error, in: self)
}
}
}
}
Expand Down
Loading