查看指定分组

This commit is contained in:
Fin 2024-12-27 14:18:27 +08:00
parent a82f65833f
commit 80f2bda954
4 changed files with 67 additions and 7 deletions

View File

@ -137,6 +137,11 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
}
}
}
cell.showGroupMessageAction = { [weak self] group in
let viewModel = MessageListViewModel(sourceType: .group(group))
let controller = MessageListViewController(viewModel: viewModel)
self?.navigationController?.pushViewController(controller, animated: true)
}
cell.cellData = (title, max(0, totalCount - messages.count), messages)
cell.isExpanded = self.expandedGroup.contains(title)
return cell
@ -205,6 +210,9 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
//
output.title
.drive(self.navigationItem.rx.title).disposed(by: rx.disposeBag)
output.groupToggleButtonHidden
.drive((groupButton.customView as! UIButton).rx.isHidden).disposed(by: rx.disposeBag)
}
private func getBatchDeleteDriver() -> Driver<MessageDeleteType> {
@ -289,7 +297,7 @@ extension MessageListViewController: UITableViewDelegate {
let action = UIContextualAction(style: .destructive, title: NSLocalizedString("removeMessage")) { [weak self] _, _, actionPerformed in
guard let self else { return }
if let cell = self.tableView.cellForRow(at: indexPath) as? MessageTableViewCell {
if self.tableView.cellForRow(at: indexPath) is MessageTableViewCell {
//
self.tableView.dataSource?.tableView?(self.tableView, commit: .delete, forRowAt: indexPath)
actionPerformed(true)

View File

@ -19,6 +19,13 @@ enum MessageListType: Int, Codable {
case group
}
enum MessageSourceType {
///
case all
///
case group(String?)
}
class MessageListViewModel: ViewModel, ViewModelType {
struct Input {
///
@ -48,6 +55,8 @@ class MessageListViewModel: ViewModel, ViewModelType {
var type: Driver<MessageListType>
///
var title: Driver<String>
///
var groupToggleButtonHidden: Driver<Bool>
}
private static let typeKey = "me.fin.messageListType"
@ -63,6 +72,9 @@ class MessageListViewModel: ViewModel, ViewModelType {
}
}
///
private var sourceType: MessageSourceType = .all
///
private var page = 0
///
@ -73,6 +85,11 @@ class MessageListViewModel: ViewModel, ViewModelType {
///
private var results: Results<Message>?
convenience init(sourceType: MessageSourceType) {
self.init()
self.sourceType = sourceType
}
///
private func getResults(filterGroups: [String?], searchText: String?) -> Results<Message>? {
if let realm = try? Realm() {
@ -157,6 +174,10 @@ class MessageListViewModel: ViewModel, ViewModelType {
}
private func getNextPage() -> [MessageListCellItem] {
if case .group = self.sourceType {
//
return getListNextPage()
}
if type == .list {
return getListNextPage()
}
@ -191,9 +212,12 @@ class MessageListViewModel: ViewModel, ViewModelType {
//
let refreshAction = BehaviorRelay<MJRefreshAction>(value: .none)
//
let filterGroups: BehaviorRelay<[String?]> = {
if let groups: [String?] = Settings["me.fin.filterGroups"] {
return BehaviorRelay<[String?]>(value: groups)
let filterGroups: BehaviorRelay<[String?]> = { [weak self] in
guard let self = self else {
return BehaviorRelay<[String?]>(value: [])
}
if case .group(let name) = self.sourceType {
return BehaviorRelay<[String?]>(value: [name])
}
return BehaviorRelay<[String?]>(value: [])
}()
@ -344,12 +368,21 @@ class MessageListViewModel: ViewModel, ViewModelType {
}).disposed(by: rx.disposeBag)
//
let groupToggleButtonHidden = {
if case .group = self.sourceType {
return true
}
return false
}()
return Output(
messages: messagesRelay.asDriver(onErrorJustReturn: []),
refreshAction: refreshAction.asDriver(),
alertMessage: alertMessage,
type: Driver.merge(messageTypeChanged.asDriver(), Driver.just(self.type)),
title: titleRelay.asDriver()
title: titleRelay.asDriver(),
groupToggleButtonHidden: Driver.just(groupToggleButtonHidden)
)
}
}

View File

@ -22,7 +22,18 @@ enum MessageListCellItem: Equatable {
case (.message(let l), .message(let r)):
return l.id == r.id && l.dateText == r.dateText
case (.messageGroup(let l, _, let lMessages), .messageGroup(let r, _, let rMessages)):
return l == r && lMessages.first?.dateText == rMessages.first?.dateText
if l != r {
return false
}
if lMessages.first?.dateText != rMessages.first?.dateText {
return false
}
for (lMessage, rMessage) in zip(lMessages, rMessages) {
if lMessage.id != rMessage.id {
return false
}
}
return true
default:
return false
}

View File

@ -136,6 +136,9 @@ class MessageGroupTableViewCell: UITableViewCell {
groupHeader.clearAction = newValue
}
}
///
var showGroupMessageAction: ((_ group: String?) -> Void)? = nil
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
@ -162,7 +165,12 @@ class MessageGroupTableViewCell: UITableViewCell {
make.bottom.equalToSuperview().offset(-18)
make.centerX.equalToSuperview()
}
moreView.addGestureRecognizer(UITapGestureRecognizer())
moreView.gestureRecognizers?.first?.rx.event.subscribe(onNext: { [weak self] _ in
self?.showGroupMessageAction?(self?.messages.first?.group)
}).disposed(by: self.rx.disposeBag)
refreshViewState()
}