mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.6 KiB
Swift
63 lines
2.6 KiB
Swift
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
import UIKit
|
|
import Combine
|
|
import GRDB
|
|
import DifferenceKit
|
|
import SessionUIKit
|
|
import SessionMessagingKit
|
|
import SessionUtilitiesKit
|
|
|
|
protocol SessionTableViewModel: AnyObject, SectionedTableData {
|
|
var dependencies: Dependencies { get }
|
|
|
|
var title: String { get }
|
|
var subtitle: String? { get }
|
|
var initialLoadMessage: String? { get }
|
|
var cellType: SessionTableViewCellType { get }
|
|
var emptyStateTextPublisher: AnyPublisher<String?, Never> { get }
|
|
var state: TableDataState<Section, TableItem> { get }
|
|
var footerView: AnyPublisher<UIView?, Never> { get }
|
|
var footerButtonInfo: AnyPublisher<SessionButton.Info?, Never> { get }
|
|
|
|
// MARK: - Functions
|
|
|
|
func canEditRow(at indexPath: IndexPath) -> Bool
|
|
func leadingSwipeActionsConfiguration(forRowAt indexPath: IndexPath, in tableView: UITableView, of viewController: UIViewController) -> UISwipeActionsConfiguration?
|
|
func trailingSwipeActionsConfiguration(forRowAt indexPath: IndexPath, in tableView: UITableView, of viewController: UIViewController) -> UISwipeActionsConfiguration?
|
|
func onAppear(targetViewController: BaseVC)
|
|
}
|
|
|
|
extension SessionTableViewModel {
|
|
var subtitle: String? { nil }
|
|
var initialLoadMessage: String? { nil }
|
|
var cellType: SessionTableViewCellType { .general }
|
|
var emptyStateTextPublisher: AnyPublisher<String?, Never> { Just(nil).eraseToAnyPublisher() }
|
|
var tableData: [SectionModel] { state.tableData }
|
|
var footerView: AnyPublisher<UIView?, Never> { Just(nil).eraseToAnyPublisher() }
|
|
var footerButtonInfo: AnyPublisher<SessionButton.Info?, Never> { Just(nil).eraseToAnyPublisher() }
|
|
|
|
// MARK: - Functions
|
|
|
|
func updateTableData(_ updatedData: [SectionModel]) { state.updateTableData(updatedData) }
|
|
|
|
func canEditRow(at indexPath: IndexPath) -> Bool { false }
|
|
func leadingSwipeActionsConfiguration(forRowAt indexPath: IndexPath, in tableView: UITableView, of viewController: UIViewController) -> UISwipeActionsConfiguration? { nil }
|
|
func trailingSwipeActionsConfiguration(forRowAt indexPath: IndexPath, in tableView: UITableView, of viewController: UIViewController) -> UISwipeActionsConfiguration? { nil }
|
|
func onAppear(targetViewController: BaseVC) { }
|
|
}
|
|
|
|
// MARK: - SessionTableViewCellType
|
|
|
|
enum SessionTableViewCellType: CaseIterable {
|
|
case general
|
|
case fullConversation
|
|
|
|
var viewType: UITableViewCell.Type {
|
|
switch self {
|
|
case .general: return SessionCell.self
|
|
case .fullConversation: return FullConversationCell.self
|
|
}
|
|
}
|
|
}
|