添加删除群组消息功能

This commit is contained in:
Fin 2024-12-27 12:14:46 +08:00
parent 437f4f92ab
commit a82f65833f
4 changed files with 96 additions and 10 deletions

View File

@ -2254,6 +2254,29 @@
}
}
},
"removeNotice" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "This will be permanently removed and cannot be undone."
}
},
"tr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Bu kalıcı olarak kaldırılacak ve geri alınamaz."
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "将永久删除并且无法恢复。"
}
}
}
},
"resetFailed" : {
"extractionState" : "manual",
"localizations" : {

View File

@ -175,7 +175,7 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
input: MessageListViewModel.Input(
refresh: tableView.refreshControl!.rx.controlEvent(.valueChanged).asDriver(),
loadMore: tableView.mj_footer!.rx.refresh.asDriver(),
itemDelete: tableView.rx.itemDeleted.asDriver().map { $0.row },
itemDelete: tableView.rx.modelDeleted(MessageListCellItem.self).asDriver(),
itemSelected: itemSelected,
delete: getBatchDeleteDriver(),
groupToggleTap: groupBtn.rx.tap.asDriver(),
@ -287,8 +287,25 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
extension MessageListViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let action = UIContextualAction(style: .destructive, title: NSLocalizedString("removeMessage")) { [weak self] _, _, actionPerformed in
self?.tableView.dataSource?.tableView?(self!.tableView, commit: .delete, forRowAt: indexPath)
actionPerformed(true)
guard let self else { return }
if let cell = self.tableView.cellForRow(at: indexPath) as? MessageTableViewCell {
//
self.tableView.dataSource?.tableView?(self.tableView, commit: .delete, forRowAt: indexPath)
actionPerformed(true)
return
}
//
let alertView = UIAlertController(title: nil, message: NSLocalizedString("removeNotice"), preferredStyle: .alert)
alertView.addAction(UIAlertAction(title: NSLocalizedString("removeMessage"), style: .destructive, handler: { _ in
self.tableView.dataSource?.tableView?(self.tableView, commit: .delete, forRowAt: indexPath)
actionPerformed(true)
}))
alertView.addAction(UIAlertAction(title: NSLocalizedString("Cancel"), style: .cancel, handler: { _ in
actionPerformed(false)
}))
self.present(alertView, animated: true, completion: nil)
}
let configuration = UISwipeActionsConfiguration(actions: [action])

View File

@ -26,7 +26,7 @@ class MessageListViewModel: ViewModel, ViewModelType {
///
var loadMore: Driver<Void>
///
var itemDelete: Driver<Int>
var itemDelete: Driver<MessageListCellItem>
///
var itemSelected: Driver<Int>
///
@ -259,16 +259,58 @@ class MessageListViewModel: ViewModel, ViewModelType {
}).disposed(by: rx.disposeBag)
// message
input.itemDelete.drive(onNext: { [weak self] index in
if var section = messagesRelay.value.first {
if let realm = try? Realm(), let message = self?.results?[index] {
input.itemDelete.drive(onNext: { [weak self] item in
guard let self else { return }
guard var section = messagesRelay.value.first else {
return
}
//
switch item {
case .message(let model):
//
if let realm = try? Realm(),
let message = realm.objects(Message.self).filter("id == %@", model.id).first
{
try? realm.write {
realm.delete(message)
}
}
section.messages.remove(at: index)
messagesRelay.accept([section])
// cell item
section.messages.removeAll { cellItem in
if case .message(let m) = cellItem {
return m.id == model.id
}
return false
}
case .messageGroup(let groupName, _, let messages):
//
if let realm = try? Realm(), let first = messages.first {
let messageResult: Results<Message>?
if let group = first.group {
messageResult = self.results?.filter("group == %@", group)
} else {
messageResult = self.results?.filter("group == nil")
}
if let messageResult {
try? realm.write {
realm.delete(messageResult)
}
}
}
// cell item
section.messages.removeAll { cellItem in
if case .messageGroup(let name, _, _) = cellItem {
return name == groupName
}
return false
}
}
//
messagesRelay.accept([section])
}).disposed(by: rx.disposeBag)
//

View File

@ -17,6 +17,8 @@ enum MessageListCellDateStyle {
class MessageItemModel {
var id: String = ""
var group: String?
var attributedText: NSAttributedString?
var dateText: String?
@ -33,6 +35,9 @@ class MessageItemModel {
}
init(message: Message) {
self.id = message.id
self.group = message.group
let title = message.title ?? ""
let subtitle = message.subtitle ?? ""
let body = message.body ?? ""
@ -83,7 +88,6 @@ class MessageItemModel {
]))
}
self.id = message.id
self.attributedText = text
self.createDate = message.createDate
defer {