mirror of
https://github.com/Finb/Bark.git
synced 2025-12-08 21:36:01 +00:00
去掉 ViewModel 中的UIKit 引入
This commit is contained in:
parent
d82f84309f
commit
4004c8890a
@ -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)
|
||||
|
||||
@ -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> {
|
||||
|
||||
// message操作alert
|
||||
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 })
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user