@Persisted var bookmark: Bool
@Persisted var bookmarkDate: Date?
////
return Single.create { single in
let storeValue = self.realm.objects(StoreTable.self)
.sorted(byKeyPath: "bookmarkDate", ascending: false)
sorted(byKeyPath
를 create 시 date가 아닌 bookmarkDate로 설정
[x] 버튼의 isSeleted 값에 따라 필터 역순 값이 바인딩되게 하지 않고, UserDefatult에 저장한 Bool값에 따라 역순이 변경되도록 이슈 수정
filterReverseButton.rx.tap
.throttle(.milliseconds(500), scheduler: MainScheduler.instance)
.withUnretained(self)
.bind(onNext: { owner, event in
UserDefaultHandler.reverseFilter.toggle()
owner.filterReverseDelegate?.filterReverseButtonTapped(())
})
.disposed(by: disposeBag)
extension FavoriteViewController: FilterReverseDelegate {
func filterReverseButtonTapped(_ void: Void) {
self.didSelectReverseFilterButton.accept(void)
}
override func bind() {
let input = FavoriteViewModel.Input(viewWillAppearEvent: self.rx.viewWillAppear.map { _ in },
didSelectReverseFilterButton: didSelectReverseFilterButton.asObservable())
input.didSelectReverseFilterButton
.withLatestFrom(output.filterType)
.withUnretained(self)
.bind(onNext: { owner, filterType in
owner.defaultFavoriteUseCase.fetchFilterStore(filterType: filterType, reverseFilter: UserDefaultHandler.reverseFilter)
})
.disposed(by: disposeBag)
didSelectBookmark
.skip(1)
.withUnretained(self)
.bind(onNext: { owner, bookmark in
owner.storeVO.bookmark = bookmark
if bookmark {
owner.storeVO.bookmarkDate = Date()
} else {
owner.storeVO.bookmarkDate = nil
}
})
.disposed(by: disposeBag)
///////
func shouldUpdateStore(_ store: StoreVO) -> Bool {
guard let storeObject = realm.object(
ofType: StoreTable.self,
forPrimaryKey: store.id
) else { return false }
if store.rate != storeObject.rate || store.bookmark != storeObject.bookmark || store.bookmarkDate != storeObject.bookmarkDate {
return true
}
return false
}
}
didSelectBookmark
즉, 좋아요 버튼 트리거 이벤트마다, 좋아요한 시간을 업데이트 해주게 수정하고,store.bookmarkDate != storeObject.bookmarkDate
를 추가해 Domain 모델의 bookmarkDate
와 Realm에 저장된 bookmarkDate
를 비교하여 업데이트 유무를 판단했다.