Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.0.5 업데이트 #6

Merged
merged 2 commits into from
Jan 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions idorm.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1494,7 +1494,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.4;
MARKETING_VERSION = 1.0.5;
PRODUCT_BUNDLE_IDENTIFIER = eungcheol.idorm;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand Down Expand Up @@ -1531,7 +1531,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.4;
MARKETING_VERSION = 1.0.5;
PRODUCT_BUNDLE_IDENTIFIER = eungcheol.idorm;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand Down
Binary file not shown.
3 changes: 1 addition & 2 deletions idorm/Configuration/Drivers/FilterDriver.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,8 @@ import RxCocoa

final class FilterDriver {

static let shared = FilterDriver()
private let disposeBag = DisposeBag()
private init() {
init() {
Observable.combineLatest(dorm, joinPeriod)
.map { $0.0 && $0.1 ? true : false }
.bind(to: isAllowed)
Expand Down
2 changes: 0 additions & 2 deletions idorm/Configuration/Storages/FilterStorage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,9 @@ final class FilterStorage {

func saveFilter(_ filter: MatchingDTO.Filter) {
self.filter = filter
self.hasFilter = true
}

func resetFilter() {
self.filter = MatchingDTO.Filter()
self.hasFilter = false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ final class LoginViewReactor: Reactor {
UserStorage.savePassword(from: pw)
let data = APIService.decode(ResponseModel<MemberDTO.Retrieve>.self, data: response.data).data
MemberStorage.shared.saveMember(data)
TokenStorage.saveToken(token: data.loginToken ?? "")
TokenStorage.saveToken(token: data.loginToken!)
return owner.retrieveMatchingInfo()
default:
let message = APIService.decode(ErrorResponseModel.self, data: response.data).message
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,67 +12,88 @@ import ReactorKit
final class MatchingFilterViewReactor: Reactor {

enum Action {
case viewDidLoad
case didTapResetButton
case didTapConfirmButton
case didTapDormButton(Dormitory)
case didTapJoinPeriodButton(JoinPeriod)
case didTapHabitButton(Habit)
case didTapHabitButton(Habit, Bool)
case didChangeSlider(minValue: Int, maxValue: Int)
}

enum Mutation {
case setPopVC
case setRequestCard
case saveFilter
case setFilter(MatchingDTO.Filter)
}

struct State {
var popVC: Bool = false
var requestCard: Bool = false
var currentFilter: MatchingDTO.Filter = .init()
var isAllowedConfirmBtn: Bool = false
}

let initialState: State = State()
var filterDriver = FilterDriver()

func mutate(action: Action) -> Observable<Mutation> {
var newFilter = FilterStorage.shared.filter
var newFilter = currentState.currentFilter

switch action {
case .viewDidLoad:
if FilterStorage.shared.hasFilter {
filterDriver.dorm.accept(true)
filterDriver.joinPeriod.accept(true)

let currentFilter = FilterStorage.shared.filter
return .just(.setFilter(currentFilter))
} else {

return .empty()
}

case .didTapResetButton:
FilterStorage.shared.hasFilter = false
FilterStorage.shared.resetFilter()
FilterDriver.shared.reset()

return .concat([
.just(.setRequestCard),
.just(.setPopVC)
])

case .didTapConfirmButton:
FilterStorage.shared.hasFilter = true

return Observable.concat([
Observable.just(.setRequestCard),
Observable.just(.setPopVC)
.just(.saveFilter),
.just(.setRequestCard),
.just(.setPopVC)
])

case .didTapDormButton(let dorm):
FilterDriver.shared.dorm.accept(true)
filterDriver.dorm.accept(true)
newFilter.dormNum = dorm
return Observable.just(.setFilter(newFilter))
return .just(.setFilter(newFilter))

case .didTapJoinPeriodButton(let period):
FilterDriver.shared.joinPeriod.accept(true)
filterDriver.joinPeriod.accept(true)
newFilter.joinPeriod = period
return Observable.just(.setFilter(newFilter))
return .just(.setFilter(newFilter))

case .didTapHabitButton(let habit):
case let .didTapHabitButton(habit, state):
switch habit {
case .snoring:
newFilter.isSnoring = !newFilter.isSnoring
newFilter.isSnoring = state
case .smoking:
newFilter.isSmoking = !newFilter.isSmoking
newFilter.isSmoking = state
case .grinding:
newFilter.isGrinding = !newFilter.isGrinding
newFilter.isGrinding = state
case .allowedEarphone:
newFilter.isWearEarphones = !newFilter.isWearEarphones
newFilter.isWearEarphones = state
case .allowedFood:
newFilter.isAllowedFood = !newFilter.isAllowedFood
newFilter.isAllowedFood = state
}
return Observable.just(.setFilter(newFilter))

Expand All @@ -94,7 +115,13 @@ final class MatchingFilterViewReactor: Reactor {
newState.requestCard = true

case .setFilter(let newFilter):
FilterStorage.shared.saveFilter(newFilter)
newState.currentFilter = newFilter

case .saveFilter:
let currentFilter = currentState.currentFilter

print(currentFilter)
FilterStorage.shared.saveFilter(currentFilter)
}

return newState
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,17 @@ final class MatchingFilterViewController: BaseViewController, View {
private let ageLabel = MatchingUtilities.titleLabel(text: "나이")
private let ageDescriptionLabel = MatchingUtilities.descriptionLabel("선택하신 연령대의 룸메이트만 나와 매칭돼요.")
private let slider = MatchingUtilities.slider()
private let filterDriver = FilterDriver()

// MARK: - LifeCycle

override func viewDidLoad() {
setupStackView()
super.viewDidLoad()

reactor?.filterDriver = filterDriver
reactor?.action.onNext(.viewDidLoad)

if FilterStorage.shared.hasFilter {
updateFilteredUI(FilterStorage.shared.filter)
}
Expand Down Expand Up @@ -119,35 +123,40 @@ final class MatchingFilterViewController: BaseViewController, View {
snoreButton.rx.tap
.withUnretained(self)
.do { $0.0.snoreButton.isSelected.toggle() }
.map { _ in MatchingFilterViewReactor.Action.didTapHabitButton(.snoring) }
.map { $0.0.snoreButton.isSelected }
.map { MatchingFilterViewReactor.Action.didTapHabitButton(.snoring, $0) }
.bind(to: reactor.action)
.disposed(by: disposeBag)

grindingButton.rx.tap
.withUnretained(self)
.do { $0.0.grindingButton.isSelected.toggle() }
.map { _ in MatchingFilterViewReactor.Action.didTapHabitButton(.grinding) }
.map { $0.0.grindingButton.isSelected }
.map { MatchingFilterViewReactor.Action.didTapHabitButton(.grinding, $0) }
.bind(to: reactor.action)
.disposed(by: disposeBag)

smokingButton.rx.tap
.withUnretained(self)
.do { $0.0.smokingButton.isSelected.toggle() }
.map { _ in MatchingFilterViewReactor.Action.didTapHabitButton(.smoking) }
.map { $0.0.smokingButton.isSelected }
.map { MatchingFilterViewReactor.Action.didTapHabitButton(.smoking, $0) }
.bind(to: reactor.action)
.disposed(by: disposeBag)

allowedFoodButton.rx.tap
.withUnretained(self)
.do { $0.0.allowedFoodButton.isSelected.toggle() }
.map { _ in MatchingFilterViewReactor.Action.didTapHabitButton(.allowedFood) }
.map { $0.0.allowedFoodButton.isSelected }
.map { MatchingFilterViewReactor.Action.didTapHabitButton(.allowedFood, $0) }
.bind(to: reactor.action)
.disposed(by: disposeBag)

allowedEarphoneButton.rx.tap
.withUnretained(self)
.do { $0.0.allowedEarphoneButton.isSelected.toggle() }
.map { _ in MatchingFilterViewReactor.Action.didTapHabitButton(.allowedEarphone) }
.map { $0.0.allowedEarphoneButton.isSelected }
.map { MatchingFilterViewReactor.Action.didTapHabitButton(.allowedEarphone, $0) }
.bind(to: reactor.action)
.disposed(by: disposeBag)

Expand All @@ -161,7 +170,7 @@ final class MatchingFilterViewController: BaseViewController, View {
.bind { $0.0.navigationController?.popViewController(animated: true) }
.disposed(by: disposeBag)

FilterDriver.shared.isAllowed
filterDriver.isAllowed
.bind(to: floatyBottomView.rightButton.rx.isEnabled)
.disposed(by: disposeBag)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,15 +106,15 @@ final class ManageMyInfoViewController: BaseViewController, View {
}
.disposed(by: disposeBag)

// PutEmailVC 이동
// ConfirmPwVC 이동
reactor.state
.map { $0.isOpenedConfirmPwVC }
.distinctUntilChanged()
.filter { $0 }
.withUnretained(self)
.bind { owner, _ in
let viewController = PutEmailViewController(.modifyPw)
viewController.reactor = PutEmailViewReactor()
let viewController = ConfirmPwViewController(.modifyPw)
viewController.reactor = ConfirmPwViewReactor(.modifyPw)
owner.navigationController?.pushViewController(viewController, animated: true)
}
.disposed(by: disposeBag)
Expand All @@ -132,7 +132,7 @@ final class ManageMyInfoViewController: BaseViewController, View {
owner.present(navVC, animated: true)
}
.disposed(by: disposeBag)

// 닉네임 변경
reactor.state
.map { $0.currentNickname }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ final class ConfirmPwViewReactor: Reactor {
case setNicknameVC(Bool)
case setLoading(Bool)
case setLoginVC(Bool)
case setPopVC(Bool)
}

struct State {
Expand All @@ -58,6 +59,7 @@ final class ConfirmPwViewReactor: Reactor {
var isOpenedNicknameVC: Bool = false
var isOpenedLoginVC: Bool = false
var isLoading: Bool = false
var popVC: Bool = false
}

var initialState: State = State()
Expand Down Expand Up @@ -205,6 +207,7 @@ final class ConfirmPwViewReactor: Reactor {
}
.subscribe(on: MainScheduler.asyncInstance)
])
.subscribe(on: MainScheduler.asyncInstance)

case .modifyPw:
return .concat([
Expand All @@ -215,10 +218,12 @@ final class ConfirmPwViewReactor: Reactor {
.flatMap { response -> Observable<Mutation> in
switch response.statusCode {
case 200:
UserStorage.savePassword(from: password1)

return .concat([
.just(.setLoading(false)),
.just(.setLoginVC(true)),
.just(.setLoginVC(false))
.just(.setPopVC(true)),
.just(.setPopVC(false))
])
default:
fatalError()
Expand Down Expand Up @@ -283,6 +288,9 @@ final class ConfirmPwViewReactor: Reactor {

case .setLoginVC(let isOpened):
newState.isOpenedLoginVC = isOpened

case .setPopVC(let state):
newState.popVC = state
}

return newState
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,14 +206,24 @@ final class ConfirmPwViewController: BaseViewController, View {
.filter { $0 }
.withUnretained(self)
.bind { owner, _ in
let loginVC = LoginViewController()
loginVC.reactor = LoginViewReactor()
let navVC = UINavigationController(rootViewController: loginVC)
navVC.modalPresentationStyle = .fullScreen
owner.present(navVC, animated: true)
owner.navigationController?.popToRootViewController(animated: true)
//
// let loginVC = LoginViewController()
// loginVC.reactor = LoginViewReactor()
// let navVC = UINavigationController(rootViewController: loginVC)
// navVC.modalPresentationStyle = .fullScreen
// owner.present(navVC, animated: true)
}
.disposed(by: disposeBag)

// 뒤로가기
reactor.state
.map { $0.popVC }
.filter { $0 }
.withUnretained(self)
.bind { $0.0.navigationController?.popViewController(animated: true) }
.disposed(by: disposeBag)

// 인디케이터 애니메이션
reactor.state
.map { $0.isLoading }
Expand Down