去掉 ViewModel 中的UIKit 引入

This commit is contained in:
Fin 2024-08-23 15:44:24 +08:00 committed by Feng
parent d82f84309f
commit 4004c8890a
3 changed files with 29 additions and 27 deletions

View File

@ -10,7 +10,7 @@ import RealmSwift
import RxCocoa
import RxDataSources
import RxSwift
import UIKit
struct GroupFilterModel {
var name: String?
var checked: Bool
@ -43,7 +43,7 @@ class GroupFilterViewModel: ViewModel, ViewModelType {
// cell checked
input.showAllGroups.drive(onNext: { isShowAllGroups in
groupCellModels.forEach { model in
for model in groupCellModels {
model.checked.accept(isShowAllGroups)
}
}).disposed(by: rx.disposeBag)

View File

@ -25,7 +25,7 @@ enum MessageDeleteType: Int {
NSLocalizedString("lastHour"),
NSLocalizedString("today"),
NSLocalizedString("todayAndYesterday"),
NSLocalizedString("allTime"),
NSLocalizedString("allTime")
][self.rawValue]
}
}
@ -97,11 +97,11 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
override func bindViewModel() {
guard let deleteBtn = deleteButton.customView as? BKButton else {
return;
return
}
let batchDelete = deleteBtn.rx
.tap
.flatMapLatest {_ -> PublishRelay<MessageDeleteType> in
.flatMapLatest { _ -> PublishRelay<MessageDeleteType> in
let relay = PublishRelay<MessageDeleteType>()
func alert(_ type: MessageDeleteType) {
@ -141,18 +141,19 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
}
guard let groupBtn = groupButton.customView as? BKButton else {
return;
return
}
let output = viewModel.transform(
input: MessageListViewModel.Input(
refresh: tableView.refreshControl!.rx.controlEvent(.valueChanged).asDriver(),
loadMore: tableView.mj_footer!.rx.refresh.asDriver(),
itemDelete: tableView.rx.itemDeleted.asDriver(),
itemSelected: tableView.rx.itemSelected.asDriver(),
itemDelete: tableView.rx.itemDeleted.asDriver().map { $0.row },
itemSelected: tableView.rx.itemSelected.asDriver().map { $0.row },
delete: batchDelete.asDriver(onErrorDriveWith: .empty()),
groupTap: groupBtn.rx.tap.asDriver(),
searchText: navigationItem.searchController!.searchBar.rx.text.asObservable()))
searchText: navigationItem.searchController!.searchBar.rx.text.asObservable()
))
// tableView
output.refreshAction
@ -164,7 +165,8 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
animationConfiguration: AnimationConfiguration(
insertAnimation: .none,
reloadAnimation: .none,
deleteAnimation: .left),
deleteAnimation: .left
),
configureCell: { _, tableView, _, item -> UITableViewCell in
guard let cell = tableView.dequeueReusableCell(withIdentifier: "\(MessageTableViewCell.self)") as? MessageTableViewCell else {
return UITableViewCell()
@ -173,7 +175,8 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
return cell
}, canEditRowAtIndexPath: { _, _ in
true
})
}
)
output.messages
.drive(tableView.rx.items(dataSource: dataSource))
@ -181,7 +184,7 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
// messagealert
output.alertMessage.drive(onNext: { [weak self] message in
self?.alertMessage(message: message.0, indexPath: message.1)
self?.alertMessage(message: message.0, indexPath: IndexPath(row: message.1, section: 0))
}).disposed(by: rx.disposeBag)
//
@ -201,9 +204,9 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
func alertMessage(message: String, indexPath: IndexPath) {
let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
let copyAction = UIAlertAction(title: NSLocalizedString("CopyAll"), style: .default, handler: { [weak self]
(_: UIAlertAction) -> Void in
UIPasteboard.general.string = message
self?.showSnackbar(text: NSLocalizedString("Copy"))
(_: UIAlertAction) in
UIPasteboard.general.string = message
self?.showSnackbar(text: NSLocalizedString("Copy"))
})
let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel"), style: .cancel, handler: { _ in })

View File

@ -11,14 +11,13 @@ import RealmSwift
import RxCocoa
import RxDataSources
import RxSwift
import UIKit
class MessageListViewModel: ViewModel, ViewModelType {
struct Input {
var refresh: Driver<Void>
var loadMore: Driver<Void>
var itemDelete: Driver<IndexPath>
var itemSelected: Driver<IndexPath>
var itemDelete: Driver<Int>
var itemSelected: Driver<Int>
var delete: Driver<MessageDeleteType>
var groupTap: Driver<Void>
var searchText: Observable<String?>
@ -27,7 +26,7 @@ class MessageListViewModel: ViewModel, ViewModelType {
struct Output {
var messages: Driver<[MessageSection]>
var refreshAction: Driver<MJRefreshAction>
var alertMessage: Driver<(String, IndexPath)>
var alertMessage: Driver<(String, Int)>
var groupFilter: Driver<GroupFilterViewModel>
var title: Driver<String>
}
@ -71,11 +70,11 @@ class MessageListViewModel: ViewModel, ViewModelType {
}
func transform(input: Input) -> Output {
let alertMessage = input.itemSelected.map({ [weak self] indexPath in
let alertMessage = input.itemSelected.map { [weak self] index in
guard let results = self?.results else {
return ("", IndexPath(row: 0, section: 0));
return ("", 0)
}
let message = results[indexPath.row]
let message = results[index]
// let message = model.message
var copyContent: String = ""
@ -90,8 +89,8 @@ class MessageListViewModel: ViewModel, ViewModelType {
}
copyContent = String(copyContent.prefix(copyContent.count - 1))
return (copyContent, indexPath)
})
return (copyContent, index)
}
//
let titleRelay = BehaviorRelay<String>(value: NSLocalizedString("historyMessage"))
//
@ -167,15 +166,15 @@ class MessageListViewModel: ViewModel, ViewModelType {
}).disposed(by: rx.disposeBag)
// message
input.itemDelete.drive(onNext: { [weak self] indexPath in
input.itemDelete.drive(onNext: { [weak self] index in
if var section = messagesRelay.value.first {
if let realm = try? Realm() {
try? realm.write {
let message = self?.results?[indexPath.row]
let message = self?.results?[index]
message?.isDeleted = true
}
}
section.messages.remove(at: indexPath.row)
section.messages.remove(at: index)
messagesRelay.accept([section])
}
}).disposed(by: rx.disposeBag)