Skip to content

Commit

Permalink
[Fix] resolve Conflict From Merge
Browse files Browse the repository at this point in the history
# Conflicts:
#	DATEROAD-iOS/DATEROAD-iOS/Presentation/AddSchedule/ViewModels/AddScheduleViewModel.swift
  • Loading branch information
ParkSY0919 committed Nov 15, 2024
2 parents 2b4e8eb + a413323 commit e078a3a
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,72 @@ final class AddScheduleViewModel: Serviceable {

lazy var addScheduleSecondViewModel: AddScheduleSecondViewModelInterface = AddScheduleSecondViewModel(addScheduleAmplitude: addScheduleAmplitude)

let addScheduleAmplitude: AddScheduleAmplitude = AddScheduleAmplitude()
var pastDatePlaces = [TimelineModel]()

var selectedTagData: [String] = []

var pastDateTagIndex = [Int]()


//MARK: - AddFirstCourse 사용되는 ViewModel

// 데이트 이름 유효성 판별 (true는 통과)
let dateName: ObservablePattern<String> = ObservablePattern(nil)

let isDateNameVaild: ObservablePattern<Bool> = ObservablePattern(nil)

private let minimumDateNameLength = 5

// 방문 일자 유효성 판별 (true는 통과)
let visitDate: ObservablePattern<String> = ObservablePattern(nil)

let isVisitDateVaild: ObservablePattern<Bool> = ObservablePattern(nil)

// 데이트 시작시간 유효성 판별 (self.count > 0 인지)
let dateStartAt: ObservablePattern<String> = ObservablePattern(nil)

let isDateStartAtVaild: ObservablePattern<Bool> = ObservablePattern(nil)

// 코스 등록 태그 생성
var tagData: [ProfileTagModel] = []

// 선택된 태그
let isOverCount: ObservablePattern<Bool> = ObservablePattern(false)

let isValidTag: ObservablePattern<Bool> = ObservablePattern(nil)

let tagCount: ObservablePattern<Int> = ObservablePattern(0)

private let minTagCnt = 1

private let maxTagCnt = 3

// 코스 지역 유효성 판별
let dateLocation: ObservablePattern<String> = ObservablePattern(nil)

let isDateLocationVaild: ObservablePattern<Bool> = ObservablePattern(nil)

// 기타
var isTimePicker: Bool?

var country = ""

var city = ""


//MARK: - AddSecondView 전용 Viewmodel 변수

var addPlaceCollectionViewDataSource: [AddCoursePlaceModel] = []

let datePlace: ObservablePattern<String> = ObservablePattern(nil)

let timeRequire: ObservablePattern<String> = ObservablePattern(nil)

let isValidOfSecondNextBtn: ObservablePattern<Bool> = ObservablePattern(false)

let editBtnEnableState: ObservablePattern<Bool> = ObservablePattern(false)

var isChange: (() -> Void)?

var isEditMode: Bool = false

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ final class ProfileViewModel: Serviceable {

var isDefaultImage: Bool = false

private var isUpdateTag: Bool = false

private var isUpdateNickName: Bool = false

var isUpdateProfileImage: ObservablePattern<Bool> = ObservablePattern(false)

var profileImage: ObservablePattern<UIImage>

var existingNickname: ObservablePattern<String>
Expand All @@ -35,6 +41,8 @@ final class ProfileViewModel: Serviceable {

var isValidTag: ObservablePattern<Bool> = ObservablePattern(false)

var isNotTagError: ObservablePattern<Bool> = ObservablePattern(true)

var isValidRegistration: ObservablePattern<Bool> = ObservablePattern(false)

var is5orLess: ObservablePattern<Bool> = ObservablePattern(false)
Expand All @@ -52,7 +60,6 @@ final class ProfileViewModel: Serviceable {
var onFailNetwork: ObservablePattern<Bool> = ObservablePattern(false)

var alertMessage: ObservablePattern<String> = ObservablePattern(nil)



init(profileData: ProfileModel) {
Expand All @@ -74,12 +81,27 @@ extension ProfileViewModel {
tagData = TendencyTag.allCases.map { $0.tag }
}

/// TODO: 기존 프사와 같은 이미지를 골랐음에도 flag 값이 false로 반환됨
/// 추후 Image 비교 로직 구현해야함
func isProfileImageChange(selectedImage: UIImage) -> Bool {
if let profileImage = profileImage.value {
let flag = profileImage.isEqual(selectedImage)
return !flag
} else {
return false
}
}

// 닉네임 글자 수 확인 => 유효카운트 여부 & 5자초과 여부 업데이트
func checkValidNicknameCount() {
func checkValidNicknameCount(fromTagButton: Bool? = nil) {
guard let nickname = self.nickname.value else { return }
if nickname.count >= 2 && nickname.count <= 5 {
self.isValidNicknameCount.value = true
self.is5orLess.value = true
if fromTagButton == true {
return
}
self.isUpdateNickName = true
} else {
self.is5orLess.value = false
if nickname.count < 2 {
Expand All @@ -104,18 +126,42 @@ extension ProfileViewModel {
func checkTagCount() {
let count = selectedTagData.count
self.tagCount.value = count
self.isUpdateTag = !isEqualTagData()

if count >= 1 && count <= 3 {
self.isValidTag.value = true
} else {
self.isValidTag.value = false
let isValidCount = (1...3).contains(count)
self.isNotTagError.value = isValidCount
self.isValidTag.value = isValidCount && isUpdateTag
}

// 이전, 현재 tag 데이터 배열 순서 상관없이 비교
func isEqualTagData() -> Bool {
guard let beforeData = profileData.value?.tags else { return true }
let currentDataSet = Set(selectedTagData)
let beforeDataSet = Set(beforeData)
return currentDataSet == beforeDataSet
}

// Tag 외(프사, 닉네임) 변경 시 isValidTag.value 컨트롤하기 위해 함수 활용
func outOfTagData(isRegistering: Bool? = nil) -> Bool {
let count = selectedTagData.count
let isValidCount = (1...3).contains(count)
if isRegistering == true {
return isValidCount
}
isNotTagError.value = isValidCount
isValidTag.value = isValidCount
return false
}

func checkValidRegistration() {
guard let isValidNickname = isValidNickname.value,
let isValidTag = isValidTag.value,
let is5CntVaild = is5orLess.value else { return }
var isValidTag = isValidTag.value,
let is5CntVaild = is5orLess.value,
let isUpdateProfileImage = isUpdateProfileImage.value else { return }

if isUpdateProfileImage || isUpdateNickName {
isValidTag = outOfTagData(isRegistering: true)
}

self.isValidRegistration.value = (isValidNickname && isValidTag && is5CntVaild)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,11 @@ private extension EditProfileViewController {
}
}

self.profileViewModel.profileImage.bind { [weak self] image in
self.profileViewModel.isUpdateProfileImage.bind { [weak self] image in
guard let initial = self?.initial else { return }
if initial {
self?.profileViewModel.checkValidNicknameCount()
_ = self?.profileViewModel.outOfTagData()
}
}

Expand Down Expand Up @@ -204,16 +205,24 @@ private extension EditProfileViewController {
}
}

self.profileViewModel.isValidTag.bind { [weak self] isValid in
guard let isValid, let initial = self?.initial else { return }
self.profileViewModel.isValidTag.bind { [weak self] _ in
guard let initial = self?.initial else { return }
if initial {
self?.profileView.updateTagErrLabel(isValid: isValid)
self?.profileViewModel.checkValidRegistration()
}
}

self.profileViewModel.isNotTagError.bind { [weak self] isNotError in
guard let isNotError, let initial = self?.initial else { return }

if initial {
self?.profileView.updateTagErrLabel(isValid: isNotError)
}
}

self.profileViewModel.nickname.bind { [weak self] nickname in
guard let nickname else { return }
_ = self?.profileViewModel.outOfTagData()
self?.profileViewModel.isValidNickname.value = false
self?.profileViewModel.compareExistingNickname()
self?.profileView.updateNicknameCount(count: nickname.count)
Expand Down Expand Up @@ -294,7 +303,7 @@ private extension EditProfileViewController {
self.profileViewModel.countSelectedTag(isSelected: sender.isSelected, tag: tag)
}
}
self.profileViewModel.checkValidNicknameCount()
self.profileViewModel.checkValidNicknameCount(fromTagButton: true)
}

@objc
Expand All @@ -308,6 +317,7 @@ private extension EditProfileViewController {
alertVC.dismissBottomSheet()
profileView.updateProfileImage(image: UIImage(resource: .emptyProfileImg))
profileViewModel.profileImage.value = UIImage(resource: .emptyProfileImg)
self.profileViewModel.isUpdateProfileImage.value = true
}

@objc
Expand Down Expand Up @@ -419,8 +429,13 @@ extension EditProfileViewController: ImagePickerDelegate {

func didPickImages(_ images: [UIImage]) {
let selectedImage = images[0]
profileView.updateProfileImage(image: selectedImage)
self.profileViewModel.profileImage.value = selectedImage
let falg = profileViewModel.isProfileImageChange(selectedImage: selectedImage)

if falg {
profileView.updateProfileImage(image: selectedImage)
self.profileViewModel.profileImage.value = selectedImage
self.profileViewModel.isUpdateProfileImage.value = true
}
}

}
Expand Down

0 comments on commit e078a3a

Please sign in to comment.