Skip to content

Commit

Permalink
Merge pull request #360 from OMZigak/feat/#358-editReadyInfo
Browse files Browse the repository at this point in the history
[feat] 준비 정보 수정 플로우 추가
  • Loading branch information
mmaybei authored Sep 4, 2024
2 parents 084491e + 3a329df commit b2e8a13
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,10 @@ class ReadyPlanInfoView: BaseView {
$0.setText("이동 소요 시간: 1시간 30분", style: .label02, color: .gray8)
}

private let editButton: UIButton = UIButton().then {
$0.setTitle("수정", for: .normal)
$0.setTitleColor(.gray6, for: .normal)
$0.titleLabel?.font = .pretendard(.caption01)
let editButton: UIButton = UIButton().then {
$0.setTitle("수정", style: .caption01, color: .gray6)
$0.backgroundColor = .gray0
$0.layer.cornerRadius = 50
$0.layer.cornerRadius = Screen.height(28) / 2
$0.clipsToBounds = true
}

Expand Down Expand Up @@ -68,6 +66,7 @@ class ReadyPlanInfoView: BaseView {
editButton.snp.makeConstraints {
$0.trailing.equalToSuperview().inset(22)
$0.bottom.equalToSuperview().inset(18)
$0.width.equalTo(Screen.width(60))
$0.height.equalTo(Screen.height(28))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ class ReadyStatusViewController: BaseViewController {
action: #selector(arrivalButtonDidTap),
for: .touchUpInside
)
rootView.readyPlanInfoView.editButton.addTarget(
self,
action: #selector(editReadyButtonDidTap),
for: .touchUpInside
)
rootView.enterReadyButtonView.addGestureRecognizer(
UITapGestureRecognizer(
target: self,
Expand Down Expand Up @@ -437,6 +442,31 @@ extension ReadyStatusViewController {
rootView.myReadyStatusProgressView.arrivalButton.isEnabled = false
}

@objc
func editReadyButtonDidTap() {
guard let _ = viewModel.promiseInfo.value?.promiseName else { return }
guard let readyStatusInfo = viewModel.myReadyStatus.value else { return }

let setReadyInfoViewModel = SetReadyInfoViewModel(
promiseID: viewModel.promiseID,
promiseTime: readyStatusInfo.promiseTime,
promiseName: viewModel.promiseInfo.value?.promiseName ?? "",
service: PromiseService()
)

setReadyInfoViewModel.storedReadyHour = (readyStatusInfo.preparationTime ?? 0) / 60
setReadyInfoViewModel.storedReadyMinute = (readyStatusInfo.preparationTime ?? 0) % 60
setReadyInfoViewModel.storedMoveHour = (readyStatusInfo.travelTime ?? 0) / 60
setReadyInfoViewModel.storedMoveMinute = (readyStatusInfo.travelTime ?? 0) % 60

let setReadyInfoViewController = SetReadyInfoViewController(viewModel: setReadyInfoViewModel)

navigationController?.pushViewController(
setReadyInfoViewController,
animated: true
)
}

@objc
func enterReadyButtonDidTap() {
guard let _ = viewModel.promiseInfo.value?.promiseName else { return }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,6 @@ final class SetReadyInfoViewController: BaseViewController {

// MARK: - LifeCycle

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

navigationController?.isNavigationBarHidden = false
}

override func loadView() {
self.view = rootView
}
Expand All @@ -47,8 +41,15 @@ final class SetReadyInfoViewController: BaseViewController {
setupNavigationBarBackButton()
setupNavigationBarTitle(with: "준비 정보 입력하기")

bindViewModel()
setupBinding()
setupTapGesture()
setupTextField()
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

navigationController?.isNavigationBarHidden = false
}

override func setupDelegate() {
Expand Down Expand Up @@ -85,6 +86,8 @@ final class SetReadyInfoViewController: BaseViewController {

@objc
private func textFieldDidChange(_ textField: UITextField) {
let text = textField.text ?? ""
viewModel.updateTime(textField: textField.accessibilityIdentifier ?? "", time: text)
viewModel.checkValid(
readyHourText: rootView.readyHourTextField.text ?? "",
readyMinuteText: rootView.readyMinuteTextField.text ?? "",
Expand Down Expand Up @@ -121,10 +124,13 @@ extension SetReadyInfoViewController: UITextFieldDelegate {

func textFieldDidEndEditing(_ textField: UITextField) {
textField.layer.borderColor = UIColor.gray3.cgColor
viewModel.updateTime(
textField: textField.accessibilityIdentifier ?? "",
time: textField.text ?? ""
)

if let text = textField.text, !text.isEmpty {
viewModel.updateTime(
textField: textField.accessibilityIdentifier ?? "",
time: textField.text ?? ""
)
}
}

func textField(
Expand All @@ -142,6 +148,27 @@ extension SetReadyInfoViewController: UITextFieldDelegate {
// MARK: - Function

private extension SetReadyInfoViewController {
func setupTextField() {
/// 저장된 준비 시간이 0이 아니면 텍스트 필드에 설정
if viewModel.storedReadyHour != 0 || viewModel.storedReadyMinute != 0 {
rootView.readyHourTextField.text = String(viewModel.storedReadyHour)
rootView.readyMinuteTextField.text = String(viewModel.storedReadyMinute)
}

/// 저장된 이동 시간이 0이 아니면 텍스트 필드에 설정
if viewModel.storedMoveHour != 0 || viewModel.storedMoveMinute != 0 {
rootView.moveHourTextField.text = String(viewModel.storedMoveHour)
rootView.moveMinuteTextField.text = String(viewModel.storedMoveMinute)
}

viewModel.checkValid(
readyHourText: rootView.readyHourTextField.text ?? "",
readyMinuteText: rootView.readyMinuteTextField.text ?? "",
moveHourText: rootView.moveHourTextField.text ?? "",
moveMinuteText: rootView.moveMinuteTextField.text ?? ""
)
}

func setTextFieldDelegate() {
let textFields: [(UITextField, String)] = [
(rootView.readyHourTextField, "readyHour"),
Expand All @@ -164,7 +191,7 @@ private extension SetReadyInfoViewController {

// MARK: - Data Bind

func bindViewModel() {
func setupBinding() {
viewModel.readyHour.bind { [weak self] readyHour in
self?.rootView.readyHourTextField.text = readyHour
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,22 @@ final class SetReadyInfoViewModel {

let isValid = ObservablePattern<Bool>(false)
let errMessage = ObservablePattern<String>("")

let readyHour = ObservablePattern<String>("")
let readyMinute = ObservablePattern<String>("")
let moveHour = ObservablePattern<String>("")
let moveMinute = ObservablePattern<String>("")
let isSucceedToSave = ObservablePattern<Bool>(false)


var readyHour = ObservablePattern<String>("")
var readyMinute = ObservablePattern<String>("")
var moveHour = ObservablePattern<String>("")
var moveMinute = ObservablePattern<String>("")

var preparationTime = ObservablePattern<Int>(0)
var travelTime = ObservablePattern<Int>(0)

var storedReadyHour: Int = 0
var storedReadyMinute: Int = 0
var storedMoveHour: Int = 0
var storedMoveMinute: Int = 0

let bufferTime: TimeInterval = 10 * 60

var readyTime: Int = 0
Expand Down Expand Up @@ -54,10 +63,10 @@ final class SetReadyInfoViewModel {
}

private func calculateTimes() {
let readyHours = Int(readyHour.value) ?? 0
let readyMinutes = Int(readyMinute.value) ?? 0
let moveHours = Int(moveHour.value) ?? 0
let moveMinutes = Int(moveMinute.value) ?? 0
let readyHours = Int(readyHour.value) ?? storedReadyHour
let readyMinutes = Int(readyMinute.value) ?? storedReadyMinute
let moveHours = Int(moveHour.value) ?? storedMoveHour
let moveMinutes = Int(moveMinute.value) ?? storedMoveMinute

readyTime = readyHours * 60 + readyMinutes
moveTime = moveHours * 60 + moveMinutes
Expand Down

0 comments on commit b2e8a13

Please sign in to comment.